Ada*_*Tal 5 optimization reactjs immutable.js redux reselect
现在我正在reselect创建我的选择器来从商店中提取数据并将其传递给propsvia connect.为简单起见,我的选择器的结果总是一个JS对象(toJS()在选择器的末尾调用),如下所示:
const selector = state => state.get('data').toJS();
Run Code Online (Sandbox Code Playgroud)
现在我正在努力改善一些性能,并且我意识到shouldComponentUpdate浅层比较失去了不变性的优点,因为我从选择器返回的方式.
另一方面,.get('prop')在我的HTML内部使用似乎非常烦人:
<div>{this.props.data.get('prop')}</div>
Run Code Online (Sandbox Code Playgroud)
特别是如果我有一个将简单的JS对象传递给可变的子组件的情况,如下所示:
<ChildComponent totalItems={10} />
Run Code Online (Sandbox Code Playgroud)
然后在访问道具时没有一致性(一些是可变的,一些是不可变的).
我想创建一个辅助unwrap函数,如下所示:
const unwrap = obj => obj && obj.toJS ? obj.toJS() : obj;
Run Code Online (Sandbox Code Playgroud)
但我真的不喜欢这个解决方案..我真的不喜欢这些方法.
你用什么清洁代码和性能?
一年半后回到我的问题并给出我自己的答案:
如果可能,请始终传递不可变对象。如果它不是不可变的,则按原样传递它。
我认为性能比代码的漂亮程度更重要。
如果一个值是不可变的或可变的,我会按原样传递它,并且toJS如果不需要的话永远不会调用。fromJS如果可变值没有存储在 redux 存储中,我也不会包装它们。
我只需要知道在子组件内部有些 props 是不可变的,有些则不是 - 这实际上非常简单,因为几乎总是一个复杂的对象是不可变的。