【发布时间】:2021-12-21 20:36:03
【问题描述】:
我创建了一个不可变映射,目前正在将它与 redux 一起使用,我对不可变性有一些一般性问题。据我了解,当将道具传递给组件时,道具会进行初始渲染。如果 prop 的值发生更改,它不会重新渲染,因为 Javascript 正在执行 === 操作来检查内存地址,而不是检查该内存的值。不变性所做的是更改内存中的地址以触发重新渲染。我现在担心的是:如果我打算从不使用存储在内存中旧地址中的映射,我们不是在浪费内存资源吗?此外,如果用户单击不可变地图时重复执行此操作,会越来越多地扩展其内存使用量,这不会导致性能问题吗?有没有办法在创建新地址后删除内存中的旧地址? 这是我的一些 Redux 代码,如果你能指出我是否做错了什么:
import {Map} from 'immutable'
const likesAndSaved = new Map()
function likesAndSavedReducer(state = likesAndSaved, action) {
switch (action.type) {
case 'updateObj':
return state.set(action.payloadId, action.payloadData)
default:
return state;
}
}
【问题讨论】:
-
请记住,React 是您在其之上构建的框架,它从头开始构建以处理这些问题。你不是自己检查相等性或管理内存中的对象或创建阴影树和优化 UI 绘制,React 是。这就是为什么响应式编程和不可变对象是 React 中的(非反)模式。
-
还要考虑人类点击赞按钮的速度,以及创建新对象和垃圾清扫旧对象的计算机速度。一个是秒数量级,一个是微秒。
-
谢谢我开始意识到我真的想多了这个问题
标签: javascript reactjs react-native immutability immutable.js