shouldComponentUpdate

时间:2017-04-11 17:51:32

标签: reactjs immutable.js

当使用Immutable.js时,我注意到当你创建一个数组不可变时,所有的元素数组都成为不可变对象的一部分,这样如果你改变其中一个元素,所有的元素都会被认为是新的,当然,会触发重新渲染数组中的所有元素,这很糟糕。

const taskList = [
{
    name: 'task 1',
    priority: '1',
    isDone: false

},
{
    name: 'task 2',
    priority: '1',
    isDone: false

},
{
    name: 'task 3',
    priority: '1',
    isDone: false

}
];

var tl = Immutable.fromJS(taskList);

但是,我意识到元素本身的属性不是不可变的,因此在组件级别中,您可以实现这样比较所有元素属性的shouldComponentUpdate方法。

shouldComponentUpdate(nextProps, nextState) {

    return (this.state !== nextState || this.props.name !== nextProps.name || this.props.priority !== nextProps.priority || this.props.isDone !== nextProps.isDone  );
}

我测试了它并且它可以工作,但是这段代码不干净且维护起来不容易,所以我想知道是否有更清晰的实现。

shouldComponentUpdate(nextProps, nextState) {

    return (this.state !== nextState || this.props !== nextProps );
}

如果您没有阅读,由于上述原因,上述内容无效。

toggleTask(task) {
    const found = _.find(this.state.taskList, task => task.name === task);
    found.isDone = !found.isDone;
    this.setState({ taskList: this.state.taskList });
}
编辑:我听说使用带有Immutable.js的lodash可能是多余的,但我不确定哪种lodash方法确保正确的“可变性”,如果这是有道理的。

0 个答案:

没有答案