【问题标题】:Need help adding an object to my array list, whenever it changes需要帮助将对象添加到我的数组列表中,每当它发生变化时
【发布时间】:2020-06-01 22:38:22
【问题描述】:

一开始可能听起来很混乱,但我得到了这个代码

const updateFav = (value, index) => {
  const tempData = _.cloneDeep(listProyectos);
  console.log(tempData);
  tempData[index].fav = value;
  setListProyectos(tempData);
};

const listaFavoritos = _.filter(listProyectos, item => item.fav);
const finalObject = listaFavoritos;//{[thisParam]:listaFavoritos};

我有一个平面列表,里面有一个包含多个项目的数组,还有一个下拉菜单,我在其中选择一个项目,根据 ID,它会匹配具有平面列表对象 ID 的项目,问题是,项目在平面列表将显示开关,updateFav 中的代码将保存开关中的值,整个想法是,每当我从平面列表中打开一个元素时,它都会将其保存在 ListProyectos 数组中。

_.filter 将删除所有不包含 fav: true 的元素

所以问题来了,每当我从下拉列表中更改项目并更改平面列表时,整个 listProyectos 数组都会被替换,我只看到我所做的最后一次更改。

这是下拉菜单的代码

<ModalDropdown
  defaultValue={'Seleccionar'}
  onSelect={async (index, value) => 
    {
      await ParametersBusiness.GetInstance().getProjectClients(value);
      setListProyectos(DataManager.ResponseProjectClient);
    }
  }
  options={DataManager.ListCliente}
/>

这里是平面列表

<FlatList
  data={listProyectos}
  renderItem={({item, index}) => (

图片显示实际问题是什么

好的,所以当我从该客户端打开该项目时,它会将项目保存到一个新对象,那里一切都很好,但是。

请注意,当我选择不同的客户端并切换另一个项目时,只会保存我切换的最后一个,而不是两个都保存

gif,我从不同的客户那里选择了许多项目

【问题讨论】:

  • 为什么在下拉列表中调用 setListProyectos ?它不会替换整个数组吗?
  • 最好的方法是什么?在不同的州?
  • 好的,所以每次更改下拉菜单时都会获得新项目,并且希望所有不同选项中的项目都可用?
  • 没错,这就是事情,下拉列表显示客户端,而平面列表显示与该特定客户端相关的项目,因此当我从客户端单击项目时,它会保存在新对象中,但是当我想从不同的客户添加一个新项目时,最新的项目将被这个新项目替换
  • 好的,这就是我的理解,您有一个客户列表,它是一个下拉列表,当您更改时,您会根据该列表显示项目,您可以使用开关选择一些。在此之后我仍然没有得到这个问题:(

标签: javascript arrays react-native


【解决方案1】:

最好有一个单独的状态来存储所有喜欢的项目 如下所示

const updateFav = (value, index) => {
  const tempData = _.cloneDeep(listProyectos);
  tempData[index].fav = value;
  setListProyectos(tempData);
  setListProyectos(DataManager.FavoriteList);

  const allFavItems = [...favItems];
  allFavItems.push(tempData[index]);
  setFavItems(allFavItems);
};
const [favItems,setFavItems]= useState([]); should be on top

【讨论】:

  • 这个函数等待ParametersBusiness.GetInstance().getProjectClients(value);什么是,我传递从下拉列表中选择的客户端作为参数,所以它返回与该客户端相关的项目列表,我不认为 setListProyectos(_.uniq([...listProyectos,...DataManager .ResponseProjectClient]));应该低于那条线
  • '所以它会返回与该客户相关的项目列表,'所以您想只显示该客户的项目还是所有客户的项目?
  • 忘记那部分,已经在这样做了,我想要的是,让我发布一个视频来展示实际的问题
  • 各位客户,我发些图片吧,因为我录的视频是26mb转gif的:(
  • 如果你能解释问题就很容易了
【解决方案2】:

React 适用于不可变数组。如果您全部替换它,您只能更改一个数组。看看这个:https://blog.logrocket.com/immutability-in-react-ebe55253a1cc

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2020-01-18
    • 1970-01-01
    • 2018-04-16
    相关资源
    最近更新 更多