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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有调度React的情况下更新了道具相关的知识,希望对你有一定的参考价值。

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

答案

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

  • 除非您执行深层复制,否则将一个对象分配给另一个对象不会创建完全不同的对象。两个对象引用都指向同一个对象。
  • 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 );

以上是关于在没有调度React的情况下更新了道具的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中按下按钮时重新渲染道具数据

React Provider Pattern,子组件中的道具没有更新

Apollo:在订阅更新时更新 React 道具?

REACT:无法更新儿童道具

不使用导航器的 React-Native 传递道具?

在 React 中通过更改父级的道具来更新子组件