Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native React Native Redux-如何一次删除一项_React Native_Redux - Fatal编程技术网

React native React Native Redux-如何一次删除一项

React native React Native Redux-如何一次删除一项,react-native,redux,React Native,Redux,我正在为电子商务目的创建一个react本机应用程序,并试图使购物车功能正常工作。我正在使用redux,我可以一次向购物车添加一个项目,但是当我尝试从购物车中删除一个项目时,所有相同的项目都会被删除。例如,如果我的购物车中有2支铅笔、3支钢笔和4本笔记本,并且我单击其中一本笔记本上的“删除”按钮,则所有4本笔记本都将从我的购物车中删除。我希望一次只能删除一个项目 const cartItems=(state=[],action)=>{ 开关(动作类型){ 案例“添加到购物车”: 返回[…状态、操作

我正在为电子商务目的创建一个react本机应用程序,并试图使购物车功能正常工作。我正在使用redux,我可以一次向购物车添加一个项目,但是当我尝试从购物车中删除一个项目时,所有相同的项目都会被删除。例如,如果我的购物车中有2支铅笔、3支钢笔和4本笔记本,并且我单击其中一本笔记本上的“删除”按钮,则所有4本笔记本都将从我的购物车中删除。我希望一次只能删除一个项目

const cartItems=(state=[],action)=>{
开关(动作类型){
案例“添加到购物车”:
返回[…状态、操作、有效负载]
案例“从购物车中移除商品”:
返回状态.filter(cartItem=>cartItem.id!==action.payload.id)
//返回状态.filter(cartItem=>cartItem!==action.payload.id
//const filteredItems=state.filter((cartItem)=>cartItem.id!==action.payload.id);
}
返回状态
}
导出默认项目
注释掉的这两行是我尝试过的其他方法,但最终没有成功。

这一行

返回状态.filter(cartItem=>cartItem.id!==action.payload.id)
表示“返回一个新数组,该数组由所有
状态
元素组成,除了那些具有
id
属性匹配的
action.payload.id
”元素。 因此,如果有多个项目具有相同的
id
,则所有项目都将被过滤掉

由于这只是普通的JavaScript,您可以在这里使用任何逻辑,您只需要返回一个新数组。例如,这将只删除第一个匹配的元素:

let removed=false;
返回状态。筛选器(cartItem=>{
如果(cartItem.id==action.payload.id&&!已删除){
删除=真;
返回false;
}
返回true;
});
更好的解决方案是为购物车中的项目创建另一个标识符,这样操作不会删除列表中的第一个匹配项目,而是用户通过点击删除按钮请求删除的项目。

此行

返回状态.filter(cartItem=>cartItem.id!==action.payload.id)
表示“返回一个新数组,该数组由所有
状态
元素组成,除了那些具有
id
属性匹配的
action.payload.id
”元素。 因此,如果有多个项目具有相同的
id
,则所有项目都将被过滤掉

由于这只是普通的JavaScript,您可以在这里使用任何逻辑,您只需要返回一个新数组。例如,这将只删除第一个匹配的元素:

let removed=false;
返回状态。筛选器(cartItem=>{
如果(cartItem.id==action.payload.id&&!已删除){
删除=真;
返回false;
}
返回true;
});

更好的解决方案是为购物车中的项目创建另一个标识符,这样操作不会删除列表中的第一个匹配项目,而是用户通过点击删除按钮请求删除的项目。

首先,您不应该直接改变状态(除非您使用的是
createReducer
。其次,您应该将
操作添加到上述代码中。首先,您不应该直接改变状态(除非您使用的是
createReducer
。其次,您应该将
操作添加到上述代码中。我尝试过用这种方式实现它,但仍然删除了所有相同类型的项目。@kiran如果您是指尝试添加另一个ID,则它应该对购物车中的每个项目都是唯一的,而不是对商店中的每个项目。我我不太明白你的意思。但是当我尝试你的代码时,同样的行为发生了。比如我有4个笔记本,然后我点击了“从购物车中删除”在其中一个笔记本上,所有四个都被删除。我如何为购物车中的项目创建另一个标识符?这是我的后端数据库中的产品属性吗?@kiran我已更正代码,您可以重试。这次应该可以。我的第一点是,您可以在减速机中使用任何逻辑;您不限于Array.filter(…)
方法。我的第二点是,如果购物车中可以有多个具有相同ID的物品,那么现在你无法区分两个相同的物品,比如说两支铅笔。为了指向购物车中的一支特定铅笔,你需要两支铅笔都具有某种彼此不同的标识符o现在它可以像你解释的那样工作了。所以我的问题是如何为同一个产品分配不同的ID?因为我的下一个问题是完善删除功能,并尝试将产品及其数量和价格纳入redux的整体状态。这对我来说是新的,我仍在尝试学习rn redux是如何工作的。我尝试过以这种方式实现它,但仍然删除了所有相同类型的项目。@kiran如果你是说你尝试添加了另一个ID,那么它应该对购物车中的每一个项目都是唯一的,而不是对商店中的每一个项目。我想我不太明白你的意思。但是,当我尝试你的代码时,同样的行为发生了.就像我有4个笔记本,我点击“从购物车中删除”在其中一个笔记本上,所有四个都被删除。我如何为购物车中的项目创建另一个标识符?这是我的后端数据库中的产品属性吗?@kiran我已更正代码,您可以重试。这次应该可以。我的第一点是,您可以在减速机中使用任何逻辑;您不限于Array.filter(…)
方法。我的第二点是,如果购物车中可以有多个具有相同ID的物品,那么现在你无法区分两个相同的物品,比如说两支铅笔。为了指向购物车中的一支特定铅笔,你需要两支铅笔都具有某种彼此不同的标识符o现在它工作起来就像你解释的那样