0

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

4

1 回答 1

0

我不得不在我的选择器中使用 toJS() ...

改变

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

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

ImmutableJS 在这里增加了一层复杂性。

更新:

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

于 2017-01-08T06:02:23.890 回答