将项目添加到篮式过滤器与Splice ReactJS Javascript
Add Item to Basket Filter vs Splice ReactJS Javascript
我是一个应用程序,在这里我作为用户可以将productItem添加到篮中。目前,如果用户从购物篮中删除项目,我将使用.filter从我的basketItems数组中删除basketItem对象。然后,我将State设置为这个带有筛选项的数组。
removeItem(msg, data) {
let newStateItems = this.state.items.filter((i) => i.id != data.id);
this.setState({
items: newStateItems
});
this.calculateTotals();
}
然而,问题是,一旦我删除了一个项目,然后再添加另一个项目时,创建的新项目就会显示为旧项目,直到页面刷新为止——这个应用程序的示例可以在这里找到,完整的存储库在github上。
添加项目调用如下所示:
addItem(msg, data) {
this.state.items.push(data);
this.setState({
items: this.props.items
})
this.calculateTotals();
}
如何确保购物篮中显示正确的商品?
好吧,我想你有两个问题:
- 您正在同步调用calculateTotals,即在状态对象更新之前
- 您正在将状态设置为this.props.items
我建议如下:
removeItem(msg, data) {
let newStateItems = this.state.items.filter((i) => i.id != data.id);
this.setState({
items: newStateItems
}, this.calculateTotals);
}
和
addItem(msg, data) {
let newStateItems = this.state.items.concat([data]);
this.setState({
items: newStateItems
}, this.calculateTotals);
}
注意this.calculateTotals现在是如何发送到setState的,然后setState在更新状态后调用它,而且addItem使用修改后的列表设置状态,而不是像以前那样使用道具(我认为这是一个小的拼写错误,但它可能起了作用)。
以下是设置状态的文档:https://facebook.github.io/react/docs/component-api.html#setstate
相关文章:
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 如何更改reactjs中外部/独立组件的状态或属性
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- reactjs this.refs vs document.getElementById
- 同构reactjs-cdn资产
- 在ReactJS中重新渲染孩子3次可以接受吗
- 如何在ReactJs中显示Json数据
- 将IndexedDB中的数据拉入数组,并通过ReactJS输出
- 如何在ReactJs中渲染子组件时重新加载子组件的数据
- 如何在ReactJs中链接下拉列表和文本区域
- 如何在ReactJs中呈现选定选项的更改表
- 在select上呈现不同形式的reactjs
- onClick事件未触发reactjs
- 如何在ReactJs中渲染重音符号
- reactjs无法将this.pops传递到react图表列表中
- 在reactjs组件中预加载数据
- ReactJS中动态生成的输入文本字段值设置问题
- 将项目添加到篮式过滤器与Splice ReactJS Javascript