首页 > 解决方案 > 在 TypeScript 和 React 中推送多个对象而不覆盖其他对象 - 添加到收藏夹列表

问题描述

我正在使用 TypeScipt 和 React 完成一个天气应用程序,我需要包含的最后一个功能是将查询的位置添加到收藏夹列表的能力。这是第二页的“收藏夹”。

使用查询位置时显示的卡片上的按钮将收藏状态设置为 true。

<button className="add-favorite btn" onClick={() => addToFavoritesHandler()}>Add to Favorites</button>

但是,在搜索新位置时,数组会发生突变。即使尝试将新位置添加到您的收藏夹,它也只显示一个位置,没有以前的位置。

如果有收藏的位置,则在此处进行映射。

      {favorites.length === 0 ? (
        <p> Add locations to favorites! </p>
      ) : (
        favorite &&
        arr?.map((location, id) => {
          return (

我只是希望能够在按下按钮时将多个位置添加到收藏夹列表中。

此函数处理对数组的推送,并向下钻取到查询位置上的按钮。

const [favorite, setFavorite] = useState(true);
  let favorites: WeatherType[] = [];
  // Easier readability 
  let location = weatherData;

  // Pushing the favorite location into the favorite array
  const addToFavoritesHandler = () => {
    setFavorite(true);
    if (location && favorite && !favorites.find((o) => o === location)) {
      favorites.push(location);
    }
    return favorites;
  };

GitHub 回购 - https://github.com/carbondesign/granular-ai-assignement-weather-app

谢谢你。

标签: javascriptarraysreactjstypescriptapi

解决方案


我快速阅读了存储库中的代码,我注意到favorites数组没有保存在 auseState中,我认为这就是问题所在。

这样,该数组将在每次渲染时重新创建。

如果您更改为:

const [favorites, setFavorites] = useState<WeatherType[]>([]);

并且,在addToFavoritesHandler您更新的函数favorites中:

setFavorites(favorites)

你应该让它工作。


推荐阅读