Reactjs 在不使用Flux或Redux的情况下使用Immutable.js
我一直在乱搞一些代码,我想我刚刚意识到一些愚蠢的事情。在React with Flux或Redux中使用Immutable.js是一件愚蠢的事情Reactjs 在不使用Flux或Redux的情况下使用Immutable.js,reactjs,redux,flux,immutable.js,Reactjs,Redux,Flux,Immutable.js,我一直在乱搞一些代码,我想我刚刚意识到一些愚蠢的事情。在React with Flux或Redux中使用Immutable.js是一件愚蠢的事情 toggleTask(task) { const found = _.find(this.state.taskList, task => task.name === task); found.isDone = !found.isCompleted; const index = _.findIndex(this.state.
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。
不可变的
与Redux或Flux无关
您可以使用Flux和Redux而不使用不可变
,也可以使用不可变
而不使用Flux和Redux
Immutable
有助于促进基于不可变数据结构的良好编程风格。这就是全部。这种编程风格非常适合函数式编程和React
Immutable
不是唯一一个这样做的框架。Javascript有自己的Object.freeze
方法,该方法使对象在没有额外容器的情况下不可变。您还可以使用和其他工具。是的,您实际上走在了正确的轨道上。Immutable.js在Redux/Flux中更有用的原因是Immutable.js允许您与深度嵌套的json对象进行廉价的浅层比较。这是它的主要优势。在您的情况下,我怀疑您有一个简单的todo应用程序,其中您的状态是一个简单数组列表,在这种情况下,您无法从使用Immutable.js中获得任何东西,因为您可以比较属性,这并不昂贵。在Redux应用程序中可能也不需要它,但在大型项目中,可能经常会有非常大的深嵌套json对象,在这种情况下,Immutable.js非常有用。但是它没有用,因为你不能对不可变的对象使用setState。@aLex为什么你认为你不能对不可变的对象使用setState
?因为除非我用toJS()将它转换回javascript对象,否则它不起作用。到底什么不起作用?React不关心您保存到状态的内容。请使用无效的代码更新问题。您没有正确使用库。。。与Flux/Redux无关。