跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • react 为什么要求数据不可变
未分類
13 5 月 2020

react 为什么要求数据不可变

react 为什么要求数据不可变

資深大佬 : kwoktung 30

类似的库 https://immerjs.github.io/immer/docs/introduction 和 各种教程 react 要求数据不可变;标志性用法 this.setState({ …state, a: ‘1’ })

但是其实 this.setState({ a: ‘1’ })就可以。react 本身背自己进行 merge 操作吗。例如进行 object.assign({}, state1, state2);

本质上 setState 只是做一个“脏标记”,告诉 react 我这个可能组件“脏”,可能需要刷新。那么干什么还要求数据不可变啊。

有大佬吼一声吗?

大佬有話說 (7)

  • 資深大佬 : seki

    你说的 setState 的写法没什么问题

    所谓的数据不可变指的是 state 里面的变量不能被 mutate
    比如 state.foo 是一个 array,于是下面的写法就是有问题的

    const { foo } = this.state
    foo.push(1)
    this.setState({ foo })

  • 資深大佬 : randyo

    https://zh-hans.reactjs.org/tutorial/tutorial.html#why-immutability-is-important

  • 資深大佬 : shintendo

    你举的这个例子,跟数据不可变没什么关系吧

  • 資深大佬 : otakustay

    state 是个数据的容器,本身不是数据。state 里面的每一个属性才是数据
    容器没必要不可变,但容器里面的数据必须不可变

  • 資深大佬 : roscoecheung1993

    不可变数据只需要一次浅比较就可以确定整棵子树是否需要更新,merge 视情况可能需要遍历组件树到比较深的层级,在 state 复杂的时候不可变数据会有性能提升。其他好处还包括方便做快照,方便 debug 等等。。

  • 主 資深大佬 : kwoktung

    @roscoecheung1993 方便做快照和方便 debug 怎么说?有例子吗?

  • 資深大佬 : roscoecheung1993

    @kwoktung 参考二的链接和 react 文档性能优化一节,简单来说数据不可变的结果是每次更新使用全新的一整个对象,更方便记录

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具