Redux,我可以修改状态 - 它不是只读的,在动作调度之外?

时间:2016-05-07 18:17:06

标签: redux react-redux

也许有人可以为我发光。

我一直在做redux,正在读书,我读到了#34; State是只读的#34;。好吧,我认为情况就是这样 - 但让我试试。

所以,在我的组件中,我将它包装在一个连接中,你有什么,现在我可以访问状态...所以,我在渲染方法中这样做了。

this.props.state.MYSTORE = {}

嗯,这实际上杀了我的商店。我得到了纯函数的概念,但这种观点认为“状态是只读的”#39;并非完全正确。我想它会杀死这个商店的实例(传递到我的组件中),但实际的商店是kaboomed!我有点困惑"状态是只读的#34; - 显然,事实并非如此。

实际上只读了什么?我知道你通过行动创造者设定了状态,但这并不妨碍不良行为。就像在常规组件中使用" setState",但你可以在状态树上进行赋值......

1 个答案:

答案 0 :(得分:1)

Redux的大部分行为都是对绝对执法的期望和约定。如果您使用普通对象作为Redux状态,从技术上讲,如果您愿意,可以直接改变它(但它几乎总是非常坏主意!)。

除此之外,Redux主要是一种组织所有"写"将应用程序逻辑化为单一结构化方法,而不是将随机写入分散在整个代码库中。

如果您确实需要其他帮助,以确保您不会意外地改变您的状态,您可以使用几种工具。我DevTools#LintingRedux addons catalog页面列出了一些插件,如果你不小心改变了状态会发出警告,尽管那些显然只应该用于开发。您还可以使用特定的immutable data库来“冻结”#34;您的普通对象或为您提供一组专门的数据结构来包装您的状态内容。