问题:更改
如果我在Chrome中手动刷新页面(使用CTRL-R或刷新按钮),页面会显示新数据,渲染“新”的参数。 TLDR:从
我正在使用react-router v4和最新的create-react-app。
这是我的CWRP函数:
这是我组件的完整代码:https://gist.github.com/Connorelsea/c5c14e7c54994292bef2852475fc6b43。
我正在按照这里的解决方案,但似乎对我不起作用:当路由参数改变时组件不重新挂载。
<Route />
组件的参数不会更新它正在渲染的组件。路由更改显示在URL栏中,但是直接渲染{this.props.match.params.id}
会显示旧的:id
,而不是URL栏中反映的新的:id
。
更新:我通过将<BrowserRouter />
从index.js文件移动到App.js文件中来修复了这个问题。它不再是Provider的直接子级,而是App组件的子级。不知道为什么这样做可以让一切突然工作起来。
我在做什么:我有一个<Link to="/user/11" />
,从user/7
(或任何当前ID)转到/user/11
渲染此组件的componentWillReceiveProps(newProps)
未被触发。(如果使用react-redux
连接此组件,可以尝试应用withRouter
,但没有帮助)如果我在Chrome中手动刷新页面(使用CTRL-R或刷新按钮),页面会显示新数据,渲染“新”的参数。 TLDR:从
/user/7
切换到/user/11
不会触发componentWillRecieveProps
函数,因此使组件显示旧状态。
问题:我在这里做错了什么,导致componentWillReceiveProps
无法触发?我正在使用react-router v4和最新的create-react-app。
这是我的CWRP函数:
componentWillReceiveProps(newProps) {
console.log("getProps")
this.props.getUser(newProps.match.params.id)
if (newProps.match.params.id == newProps.currentUser.id) {
this.setState({ user: "currentUser" })
} else {
this.setState({ user: "selectedUser" })
}
}
这是我组件的完整代码:https://gist.github.com/Connorelsea/c5c14e7c54994292bef2852475fc6b43。
我正在按照这里的解决方案,但似乎对我不起作用:当路由参数改变时组件不重新挂载。
console.log("getProps")
会在控制台中打印吗? - Mayank Shukla