【发布时间】:2017-09-16 07:26:58
【问题描述】:
我一直在搞乱一些代码,我想我刚刚意识到一些愚蠢的事情。在没有 Flux 或 Redux 的情况下在 React 中使用 Immutable.js 是徒劳的。
toggleTask(task) {
const found = _.find(this.state.taskList, task => task.name === task);
found.isDone = !found.isCompleted;
const index = _.findIndex(this.state.taskList, task => task.name === task);
const temp = Immutable.fromJS(this.state.taskList);
temp.setIn([index, 'isDone'], found.isDone).toJS();
this.setState({ taskList: temp.toJS() });
}
所以基本上在我意识到自己是多么愚蠢之前,我正在创建一个不可变对象,使用 Immutable.js 方法对其进行更改,然后将其更改回数组。这是没用的,因为浅比较应该在没有不可变对象的情况下工作。
shouldComponentUpdate(nextProps) {
return (this.props.name !== nextProps.name || this.props.priority !== nextProps.priority || this.props.isDone !== nextProps.isDone );
}
我一直在使用 lodash 方法,但是由于我是单独比较道具并且因为它们是原语(字符串和布尔值等原语不能是不可变的),所以我认为这并不重要,它会即使我不使用它们也可能有效。
toggleTask(task) {
const found = _.find(this.state.taskList, task => task.name === task);
found.isDone = !found.isDone;
this.setState({ taskList: this.state.taskList });
}
所以我说 React 中的 Immutable.js 没有 Redux 或 Flux 就没有用是不是错了?有什么我不正确理解的吗?我看过一些例子,因为我从未使用过 Flux 或 Redux,所以它们对我来说不太有意义。
【问题讨论】:
-
您没有正确使用该库...与 Flux/Redux 无关。
标签: reactjs redux flux immutable.js