【问题标题】:React props object vs array component updateReact props 对象 vs 数组组件更新
【发布时间】:2020-09-18 13:33:56
【问题描述】:

我有来自React 的示例,其中组件更新取决于props 是对象还是数组类型。使用reselect 库和Redux store。它是否应该是这样的,这意味着新对象将不等于prevprops?如果它假设以这种方式工作,我如何使用redux 中的对象和新道具,以便shouldComponentUpdateprops 中发生对象更改时对我有用?

https://sbqun.csb.app/

【问题讨论】:

  • 为什么需要手动使用 shouldComponentUpdate?如果从 reducer 返回一个新状态,Redux 会自动指示 react 重新渲染。我对这个问题感到困惑。
  • 你好阿舒,你打开这个例子了吗?如果您将那里的对象用作道具,则不会自动重新渲染。您可以在控制台中看到它。所以当reducer改变值时,如果type是object,它不会影响渲染,但是那个object会和之前的不同(值会改变)

标签: reactjs redux react-redux reselect


【解决方案1】:

你的 reducer 函数有误,CounterReducer.js,第 10 行

 return {
        ...state,
        // don't set this directly, this code preserves the reference to the array and react does not updates the 
        counter: state.counter
        // counter: Array.from(state.counter)
      };

查看我更新的代码,你在上面的代码中设置了引用,把上面的代码替换成这个。

return {
        ...state,
        //counter is now a new array 
        counter: [...state.counter]
        // counter: Array.from(state.counter)
      };

【讨论】:

  • 好东西,阿舒!谢谢你。将搜索有关此语法的更多信息。
  • 它被称为扩展运算符,更多在这里,developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 好的,再次感谢您,我知道但没有使用太多。所以这里需要将对象转换为元素,以便它进入道具并且就像一个数组。但是你是如何做出决定的,这意味着你怎么知道你需要在这里使用它?只想得到在redux中使用这个操作符的逻辑。
  • 这不是一个决定,这是一个一般的经验法则,整个反应的 setState 和视图更新都基于此您永远不会直接更改您的数组或对象,您修改它们并返回新的数组/对象,因此 react 知道它必须更新视图,因为状态已更新,必须阅读此 stackoverflow.com/a/40309023/8155208
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2021-10-09
  • 2019-09-11
  • 2020-08-10
  • 2021-04-24
  • 1970-01-01
  • 2018-11-23
  • 2021-11-27
相关资源
最近更新 更多