使用 ImmutableJS 访问 ReactJS 中的选择器值
Accessing a selector value in ReactJS with ImmutableJS
我正在通过 React Reselect 库使用记忆化的选择器,但我无法访问状态值以查看它是否已设置。
我希望能够做这样的事情来检查:
const room = selectRoomById('roomId1');
if (room) {
console.log('this room exists in the global.rooms store');
}
店铺是这样的:
global: {
rooms: {
"roomId1": {
"name": "room 1"
},
"roomId2": {
"name": "room 2"
}
}
}
下面是 mapStateToProps
(这部分有效)和我的选择器的样子:
const mapStateToProps = (state, props) => {
return createStructuredSelector({
room: selectRoomById(props.params.roomId)
});
}
选择器:
const selectGlobal = () => (state) => state.get('global');
const selectRoomById = (roomId) => createSelector(
selectGlobal(),
(globalState) => globalState.getIn(['rooms', roomId])
);
当我做的时候
console.log(selectRoomById('roomId1'));
我得到了一个函数,但我无法得到我正在寻找的值。我认为这是因为我正在使用 createSelector
但我不确定。有谁知道我如何访问选择器的值?
我不得不在我的选择器中使用 toJS()...
改变
(globalState) => globalState.getIn(['rooms', roomId])
至
(globalState) => globalState.getIn(['rooms', roomId]).toJS()
ImmutableJS 在这里增加了一层复杂性。
更新:
我不使用 toJS(成本高昂),而是在组件中使用 .get 和 .getIn
我正在通过 React Reselect 库使用记忆化的选择器,但我无法访问状态值以查看它是否已设置。
我希望能够做这样的事情来检查:
const room = selectRoomById('roomId1');
if (room) {
console.log('this room exists in the global.rooms store');
}
店铺是这样的:
global: {
rooms: {
"roomId1": {
"name": "room 1"
},
"roomId2": {
"name": "room 2"
}
}
}
下面是 mapStateToProps
(这部分有效)和我的选择器的样子:
const mapStateToProps = (state, props) => {
return createStructuredSelector({
room: selectRoomById(props.params.roomId)
});
}
选择器:
const selectGlobal = () => (state) => state.get('global');
const selectRoomById = (roomId) => createSelector(
selectGlobal(),
(globalState) => globalState.getIn(['rooms', roomId])
);
当我做的时候
console.log(selectRoomById('roomId1'));
我得到了一个函数,但我无法得到我正在寻找的值。我认为这是因为我正在使用 createSelector
但我不确定。有谁知道我如何访问选择器的值?
我不得不在我的选择器中使用 toJS()...
改变
(globalState) => globalState.getIn(['rooms', roomId])
至
(globalState) => globalState.getIn(['rooms', roomId]).toJS()
ImmutableJS 在这里增加了一层复杂性。
更新:
我不使用 toJS(成本高昂),而是在组件中使用 .get 和 .getIn