- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道这是否是将 immutable.js
与 redux 和 reselect
(以及 redux-saga
)一起使用的正确方法。具体来说,我想知道 toJS()
和 from fromJS()
以及在哪里使用它们。我的想法是:
toJS()
。 fromJS()
因为我认为无论如何我使用 fromJS()
对于初始状态。还是我错了? reselect
的选择器中使用了 toJS()
,所以我可以在 React 组件中使用 js 数据。 例子:
1) 在我的 React 组件中我做了:
// mapDispatchToProps
function mapDispatchToProps(dispatch) {
return {
loginRequest: values => dispatch(loginRequest(values)),
};
}
// Sending values.toJS() to my redux-saga.
submit = values => {
this.props.loginRequest(values.toJS());
};
2) 在 reducer 中我这样做(应该在这里使用 fromJS()
吗?根据 redux 文档,你应该):
const { fromJS } = require('immutable');
const state = fromJS({
pages: {
usersPage: {
loading: false,
isFetched: false,
list: [],
}
}
});
function reducer(state, action) {
switch(action.type) {
case 'USERS_LOADED':
return state
.setIn(['usersPage', 'list'], action.payload) // fromJS() here or not?
.setIn(['usersPage', 'isFetched'], true)
.setIn(['usersPage', 'loading'], false)
;
default:
return state;
}
}
export default reducer;
3) 在我的选择器中,我再次执行 toJS()
:
const selectUser = state => state.get('user', initialState);
const makeSelectList= () =>
createSelector(selectUser, userState => userState.getIn(['usersPage',
'list']).toJS());
// Which I then use in my react component:
const mapStateToProps = createStructuredSelector({
list: makeSelectList(),
});
所以基本上我想知道这是否是 js 和不可变之间的正确转换流程。还是可以以某种方式对其进行优化(减少转换步骤)?也许以上是一种非最优的逻辑方式?
最好的问候
最佳答案
saga——作为 redux 中间件——可以直接处理不可变类型,无需在此处使用昂贵的 toJS
调用
您要转换的任何点(例如 set
、setIn
、update
等)为普通 JS 非简单类型进入 Immutable redux 状态树,使用 fromJS
确保完全不可变类型 Make entire state tree immutable
恕我直言,选择器(例如 reselect
)——通过在初始检索后提供内存——可能是使用昂贵的 toJS
调用的最理想的地方,如您的示例 #3 所示。我想这真的取决于人们有多不喜欢在他们的“容器/智能”组件中使用不可变检索方法,和/或创建一大堆选择器来从 redux 状态树中检索简单的 JS 类型 Use Immutable everywhere
对我来说,问题是在哪里实际使用 fromJS
调用,例如 Action 创建者,在“容器/智能”组件分派(dispatch)中,或者在 reducer 中,例如react-boilerplate
在 reducer 中使用 fromJS
调用。
关于javascript - 在 redux 中使用不可变 js(toJS 和 from JS)的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186890/
我有两个数组。但是当其中之一为 null 时,会出现以下错误: Cannot read property 'toJS' of undefined in that line 这是触发错误的相关调用:{g
let dataSource = Immutable.fromJS( {peple: {age: 18, preferences:['basketball', 'football']}}} ); le
我们在我们的应用程序中大量使用 knockout.js,但遇到了一个新场景。它围绕 ko.toJSON 展开,但它似乎是导致问题的底层 ko.toJS。 我们有一个具有多个属性的对象,其中一个是其他对
将 toJS 与重新选择库一起使用时,我在 React 应用程序的选择器中遇到错误。我尝试导入 toJS 以及不导入它,但无论如何我都会收到错误。 nodeCreationWindow.get(...
我有以下模型: var model = { A: 'One', B: 'Two', C: 'Three' }; 我将各种 UI 元素绑定(bind)到这些字段,效果很好。但是,我将模
当我尝试使用此函数时出现类型错误。 根据 Immutable.js文档,我想将一个 obj 转换为普通的 JS obj。 例子如下: import { Map as iMap, to
在任何具有导航属性或大型对象图的一部分的 Breeze 实体上调用 ko.toJS(entity) 时,IE7-8 会提示长时间运行的脚本错误,甚至 chrome 也会陷入困境超过 1 秒。 什么给了
我刚刚在 Redux 的文档上读到,我真的不应该将 Immutable 与 Redux 一起使用。我只是无法理解这件事。为什么我不应该在 mapStateToProps 中使用 toJS()?我的意思
我从服务器获取一个 json 对象并填充我的 View 。然后我更改数据,将其推送回服务器。然后我获取了一份新的数据副本,希望它会随着任何更改刷新我的 View 。然而这并没有发生。时间差 $(doc
我想将 viewModel 转换为 Json 对象。但我不想映射计算属性。 最佳答案 如果您要将其转换为 JSON,这里有几个选项: 如果你为你的对象使用构造函数,那么你可以覆盖 .toJSON函数来
我是 React+Redux+Immutable js 的新手,我正在使用 toJS() 将我的不可变数据结构转换为原生 JavaScript 形式。但最近我偶然发现了这条推文 Author of I
我有这样一个有序的 map : { "200": { id: 200, name: "John" }, "120": { id: 120, name: "Mike" }, "350": { id
js 和 knockout 映射插件 我的问题是这样的: 我有模型,我在运行时向它添加 observables,如下所示: viewModel[value] = new ko.observable(v
我正在尝试将 ImmutableJS 与我的 React/Flux 应用程序一起使用。 我的商店是 Immutable.Map 对象。 我想知道什么时候应该使用 .toJS() ?应该是商店的 .ge
假设我有这个不可变列表: type Friend = { name: string, phone: string } const aList: List = List([...]) 现在我有一
我想知道这是否是将 immutable.js 与 redux 和 reselect(以及 redux-saga)一起使用的正确方法。具体来说,我想知道 toJS() 和 from fromJS() 以
我有一个奇怪的问题,至少我觉得很奇怪。 以下将不显示任何内容: 但是,如果像这样绑定(bind),那么它会显示正确的值,但不会更新(显示值但似乎没有绑定(bind)到对象): 我检查了 selec
现在,我正在使用 reselect 创建选择器,以从存储中提取数据并通过 connect 将其传递给 props。为简单起见,我的选择器的结果始终是一个 JS 对象(在选择器末尾调用 toJS()),
我是一名优秀的程序员,十分优秀!