在React中不分派的情况下更新道具

时间:2018-09-08 23:10:07

标签: javascript reactjs redux

“反应”:“ ^ 16.4.1”, “ react-dom”:“ ^ 16.4.2”, “ react-redux”:“ ^ 5.0.7”, “ redux”:“ ^ 4.0.0”, “ redux-thunk”:“ ^ 2.3.0”, “ webpack-dev-server”:“ ^ 3.1.5”

const items = this.props.cart.cartItems;
const index = items.indexOf(item1);
items.splice(index, 1);
this.setState({ finalPrice: 0 });

在这种情况下,道具'cartItems'被更新为变量'items',而无需调度动作。

1 个答案:

答案 0 :(得分:0)

这是因为您正在更改从另一个对象复制而没有进行深层复制的对象的对象属性。因此,当您更改嵌套属性时,它也会更改原始对象。您可以制作深层副本,也可以更改对象而不更改它们。

  • 将一个对象分配给另一个对象不会创建完全不同的对象,除非您进行深层复制。两个对象引用指向同一个对象。

  • splice改变了原始数组。使用slice或其他类似方法filter

const cart = {
  cartItems: [
    "foo", "bar", "baz"
  ],
}

console.log( "original one before update", cart.cartItems );

const index = cart.cartItems.indexOf("foo");
const items = cart.cartItems.filter( (_, i) => i !== index );

console.log( "original one after update", cart.cartItems );
console.log( "new items", items );