在没有调度React的情况下更新了道具

问题描述 投票:0回答:1

“react”:“^ 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'而不调度操作。

javascript reactjs redux
1个回答
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 );
© www.soinside.com 2019 - 2024. All rights reserved.