React Router 更改参数不会触发 componentWillReceiveProps。

6
问题:更改<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
不,它不是。这就是为什么我感到困惑。 - Connorelsea
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接