使用ImmutableJS访问ReactJS中的选择器值

时间:2017-01-08 03:34:39

标签: reactjs redux immutable.js reselect

我通过反应重选库使用了一个memoized选择器,我无法访问状态值以查看它是否已设置。

我希望能够做这样的事情来检查:

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,但我不确定。有谁知道如何访问选择器的值?

1 个答案:

答案 0 :(得分:0)

我必须在我的选择器中使用toJS()...

变化

(globalState) => globalState.getIn(['rooms', roomId])

(globalState) => globalState.getIn(['rooms', roomId]).toJS()

ImmutableJS在这里添加了一层复杂功能。

<强>更新

而不是使用toJS(这是昂贵的)我只是在组件中使用.get和.getIn