rooms
グローバルアプリコンテナにさまざまなデータを保存しています。roomDetails
を使用してグローバル状態から部屋を選択するために再選択セレクターを使用するというサブコンテナーがありますownProps.params.slug
。これは、mapStateToProps を使用して行われます。
私の問題は、ルート パラメータ ( rooms/:roomId
) を次のように変更したときです。
rooms/roomid1
に
rooms/roomid2
コンポーネント ルームの小道具が更新されていません。
リンクを使用してルートを変更しています:
<Link to={"/room/roomid1"} key={"room-roomid1"}>room 1</Link>
room
ルート パラメータが変更されたときに、コンポーネントの propsを取得して、グローバル ルームの状態からルームを再選択するにはどうすればよいですか?
部屋の小道具は、最初のページの読み込み時、または動的ルートの外側にあるルートに移動してから戻る場合に、必要に応じて読み込まれることに注意してください。コンポーネントのプロパティ (ルート パラメーター) のみが変更される同じ動的ルート間で切り替えると、それらは正しく読み込まれません。
RoomDetails/index.js
const mapStateToProps = (state, ownProps) => {
return createStructuredSelector({
room: selectRoom(ownProps.params.roomId),
});
}
...
render() {
let roomContent = null;
if (this.props.room) {
roomContent = (
<div>
{this.props.room.get('name')}
</div>
);
}
return (
<div>
{roomContent}
</div>
);
}
selectors.js
import { createSelector } from 'reselect';
const selectGlobal = () => (state) => state.get('global');
const selectRooms = () => createSelector(
selectGlobal(),
(globalState) => globalState.get('rooms')
);
const selectRoom = (roomId) => createSelector(
selectRooms(),
(roomsState) => roomsState && roomsState.get(roomId)
);