【发布时间】:2017-01-10 15:41:13
【问题描述】:
我将各种rooms 的数据存储在全局应用程序容器中。我有一个名为roomDetails 的子容器,它使用重新选择选择器使用ownProps.params.slug 从全局状态中选择一个房间。这是使用 mapStateToProps 完成的。
我的问题是,当我从以下位置更改路由参数 (rooms/:roomId) 时:
rooms/roomid1
到
rooms/roomid2
组件房间道具没有更新。
我正在使用链接更改路线:
<Link to={"/room/roomid1"} key={"room-roomid1"}>room 1</Link>
当路由参数发生变化时,如何获取组件的 room 属性以从全局房间状态中重新选择房间?
请注意,房间道具会在首页加载时加载,或者如果我转到动态路径之外的路径,然后返回。它们只是在相同的动态路由之间切换时无法正确加载,其中只有组件属性(路由参数)正在更改。
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)
);
【问题讨论】:
标签: javascript reactjs redux react-redux reselect