这里是全代码演示问题回购- https://github.com/Misiur/ReactRouterReduxBug
在线- https://codesandbox.io/s/v88B5LG0
看看这个代码
class Main extends Component {
componentWillReceiveProps(nextProps) {
if (this.props.match.params.page !== nextProps.match.params.page) {
console.log(`Page changed to ${nextProps.match.params.page}`);
} else {
console.log('Page did not change');
console.log(newProps.location.pathname);
console.log(newProps.history.location.pathname);
}
}
render() {
const page = this.props.match.params.page;
return (
<div>
<strong>Current page is {page}</strong><br />
<Link to="/1">Page 1</Link><br />
<Link to="/2">Page 2</Link><br />
<Link to="/3">Page 3</Link><br />
<Link to="/4">Page 4</Link><br />
<Link to="/5">Page 5</Link>
</div>
);
}
}
const RawRouting = (props) => {
// Do something with this.props.state
// console.log(props);
return (
<Route path="/:page(\d+)?" component={Main} />
);
};
const Routing = connect(state => ({ state }))(RawRouting);
const App = () => {
return (
<Provider store={store}>
<ConnectedRouter history={history}>
<Routing />
</ConnectedRouter>
</Provider>
);
};
我们有App
该脚手架商店和路由器, Routing
定义路由,是connect
编的状态 , Main
成分显示页面和链接的网页。
当你点击链接,一切工作正常。 然而,当你把浏览器的后退按钮,第一次URL的变化,但路线参数不对,因为newProps.location.pathname
的背后是一个历史的一步newProps.history.location.pathname
。
我已经挖得足够深,找出什么原因造成的,但不是原因:在connect
上我们的Routing
。 当它被删除,后退按钮正常工作。 这不是解决办法,因为我需要的状态存在。
所以:
- 如何使后退/前进按钮的工作而不删除我的状态映射 ?
- 为什么是现在这个样子?