0

反応再選択ライブラリを介してメモ化されたセレクターを使用していますが、状態値にアクセスして設定されているかどうかを確認するのに問題があります。

私はチェックするためにこのようなことをしたいと思います:

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 に答える