dva 需要使用 immutable 吗

来源:7-9 使用 Immutable.js 来管理store中的数据

诺巴蒂

2019-12-24

  1. 如果用 dva 的脚手架开发,有必要再使用 immutable 提升性能吗,但是怎么使用 redux-immutable。

  2. immutable 的作用是是什么,我理解就是:1、函数式编程;2、不会被误改;3、多层对象改变子对象一定返回新对象,不会误操作导致子组件不渲染;4、拷贝效率高;
    但对于非扁平化 redux 减少渲染次数提高性能我一直没太理解
    1、普通情况,immutable"深拷贝" 和 普通浅拷贝都会导致对象地址改变,父子组件重新渲染
    2、在子组件使用 PureCompoent 的时候,如果引入的 “redux 子对象(非扁平)” 不改变 都不会引起重新渲染
    所以用不用 immutable 没啥区别呀,这种情况用 PureCompoent 就好了

  3. 为啥dva 不需要 acitonCreator
    我一直觉得 acitonCreator 就是为了语义化一些,constant 不好读,如果是 redux-thunk 还可以封装一下请求,还有其他作用吗。

而 constant 是为了防止 reducer 和 派发 action 时候的 type 书写不一致,报错不明显,dva 用的是 namespace/方法名,不需要constant,所以也不需要 acitonCreator,是这样理解吗

  1. 这里我觉得因为 dva 没有 constant,所以使用的时候也容易导致写错 namespace/方法名 而不报错呀
写回答

1回答

Dell

2019-12-28

  1. 又必要,你可以直接使用 imutalble 数据类型,没必要非要用 redux-immutable

  2. 第三点不就是间接降低了渲染次数吗?

  3. 你可以使用 actionCreator 把逻辑拆分的更精细,但小项目过度拆分,是不是过度设计

  4. dva是个封装,和redux使用肯定是有区别的

1
8
诺巴蒂
回复
Dell
import { Map, is } from 'immutable' const map1 = Map({ a: 1, b: 1, c: 1 }) const map2 = Map({ a: 1, b: 1, c: 1 }) map1 === map2 //false Object.is(map1, map2) // false is(map1, map2) // true 就是说 map1 和 map2 都有一个唯一 hashCode,是根据它的 key 和 value 生成的,如果有一个变了,这个整体的 hashCode 也会变,is 时候只比较这个 hashCode,所以只比一层;这个引用和平时说的引用地址不是一个东西吧
2020-01-08
共8条回复

React零基础入门到实战,完成企业级项目简书网站开发

主流新技术 React-redux,React-router4,贯穿基础语法

5275 学习 · 2496 问题

查看课程