react-native - React Native Redux - 如何一次删除一项
问题描述
我正在为电子商务目的创建一个反应本机应用程序,并试图让购物车功能正常工作。我正在使用 redux,我可以一次将一个项目添加到购物车,但是当我尝试从购物车中删除一个项目时,所有相同的项目都会被删除。例如,如果我的购物车中有 2 支铅笔、3 支钢笔和 4 个笔记本,然后单击其中一个笔记本上的删除按钮,则所有 4 个笔记本都会从我的购物车中删除。我希望一次只能删除一项。
const cartItems = (state = [], action) => {
switch (action.type) {
case 'ADD_TO_CART':
return [...state, action.payload]
case 'REMOVE_FROM_CART':
return state.filter(cartItem => cartItem.id !== action.payload.id)
//return state.filter(cartItem => cartItem !== action.payload.id
//const filteredItems = state.filter((cartItem) => cartItem.id !== action.payload.id);
}
return state
}
export default cartItems
被注释掉的两行是我尝试过的其他方法,但最终没有奏效。
解决方案
这条线
return state.filter(cartItem => cartItem.id !== action.payload.id)
表示“返回一个新数组,该数组由state
除具有id
属性匹配的元素之外的所有元素组成action.payload.id
”。因此,如果有多个项目具有相同的id
,则所有 f 都将被过滤掉。
由于这只是普通的 JavaScript,因此您可以在此处使用任何逻辑,只需返回一个新数组。例如,这将只删除第一个匹配元素:
let removed = false;
return state.filter(cartItem => {
if (cartItem.id === action.payload.id && !removed) {
removed = true;
return false;
}
return true;
});
更好的解决方案是为购物车中的项目创建另一个标识符,以便该操作不会删除列表中的第一个匹配项目,而是用户通过点击删除按钮请求删除的项目。
推荐阅读
- ruby-on-rails - 对 rails API 的请求仅在该 API 中具有源 IP“11.0.2.1”
- django - Django:根据用户实例检索数据库条目
- python - 您如何查找子字符串是否不在字符串中作为正则表达式?
- reactjs - 可折叠问题,我想一次只打开一个问题
- c++ - Visual Studio 2017 c++ 符号未从 Microsoft 服务器加载
- pytorch - 如何使pytorch中的卷积具有关联性?
- excel - 发行抵消lastrow
- javascript - 将图像粘贴到 HTML 表单上
- python - 计算评论和回复之间的时间差(ChildID、ParentID)
- node.js - create-react-app 不工作,它需要永远,有什么建议吗?