reux-form和不可变.js
redux-form and immutable.js
使用不可变.js和 redux 形式时,是否有任何不需要调用.toJS()
的方法?
我可以看到关于这个问题的建议方法是在将Map
对象传递给表单之前调用.toJS()
:
getFormState: (state, reduxMountPoint) => state.get(reduxMountPoint).toJS()
这是否不会影响您从使用不可变.js和限制内存中获得的性能优势?
我很想知道这样做对性能的影响,是否仍然值得在表单繁重的应用程序中使用不可变.js?还有其他不依赖.toJS()
的方法吗?
当我考虑 redux-form 的未来时,我一直在讨论是否在内部使用 ImmutableJS。我短暂地考虑了这样的想法,即我可以通过某种外观以某种方式获得相同的代码库来使用两者,但是,最终,接口太不同了,ImmutableJS接口由于不喜欢本地语言语法而更加冗长。
制作使用ImmutableJS的redux-form
的替代版本几乎需要更改每一行代码,并且将是一场维护噩梦。
除非有人能向我证明使用ImmutableJS的性能优势超过了将.toJS()
负担交给选择不使用ImmutableJS的人(大多数人?)的成本,否则我认为更好的做法是像Redux本身一样,对存储库保持不自以为是。
有没有其他不依赖
.toJS()
的方法?
所以,回答你的问题:不,如果管理你的 Redux reducer 的库需要普通的 javascript 对象,并且你正在为你的 Redux 存储使用 ImmutableJS,你必须自己进行转换。
希望有更好的答案...
编辑:Redux Form的版本6支持开箱即用的不可变JS。
正如Erik所提到的,不幸的是,Redux-Form还没有内置的解决方案,这部分是由于表单状态和模型状态是一起烘焙的,而不是单独的实体。
如果您可以分离表单和模型状态,那么允许您使用 Immutable.JS 的模块化解决方案变得更加可行。这就是我创建React-Redux-Form的原因。
以下是使用 React-Redux-Form 拥有一个不可变模型化简器的方法:
import { createStore, combineReducers } from 'redux';
import { createModelReducer } from 'react-redux-form/lib/immutable';
import Immutable from 'immutable';
const store = createStore(combineReducers({
'user': createModelReducer('user', Immutable.Map())
}));
export default store;
如果你有一个表示模型的现有不可变化简器,则可以使用不可变modeled()
修饰器来修饰它:
import { createStore, combineReducers } from 'redux';
import { modeled } from 'react-redux-form/lib/immutable';
// existing immutable reducer
import userReducer from '../reducers/user-reducer';
const store = createStore(combineReducers({
'user': modeled(userReducer, 'user')
}));
export default store;
您可以通过从 redux-form/immutable 而不是 redux-form 导入来使用 redux-form 的"不可变"版本。
这是链接:http://redux-form.com/6.4.3/examples/immutable/
- 如何将不可变的js导入angular 2(alpha)
- 函数在不可变的js和redux存储中
- 如何在JS中创建对象的可变和不可变副本
- 不可变的JS映射或列表
- 不可变的js修改所有嵌套的记录
- 在不可变JS中更新列表中的对象
- 什么是不可变.js中的“所有者ID”
- 如何使用不可变JS对列表中的项目进行计数
- 如何将新项推送到不可变JS中的深度嵌套记录中
- reux-form和不可变.js
- 如何检查两个不可变JS映射是否具有相同的键
- 安全地访问不可变结构中的嵌套值.js
- 如何在不可变JS中存储和更新深度嵌套的结构
- 将 React 的不可变助手与 Immutable.js一起使用
- 不可变.js:删除集中的项目
- 使用不可变 JS 更新映射列表中的一个键
- 不可变JS.Set - 根据布尔值添加或删除
- 不可变的JS:使函数更多.功能的
- 覆盖不可变.js实例的 getter 逻辑
- 映射数组的对象到映射分组的对象键js不可变