反应路由器更改参数不会触发componentWillRecieveProps

时间:2017-06-06 15:47:34

标签: javascript reactjs redux react-router react-router-v4

问题:更改<Route />组件的参数不会更新正在呈现的组件。路线更改显示在网址栏中,但直接呈现{this.props.match.params.id}会显示旧的: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或刷新按钮),页面会显示新数据,呈现&#34; new&#34; PARAM。

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

我在这里遵循解决方案,它似乎对我不起作用。 Component does not remount when route parameters change

1 个答案:

答案 0 :(得分:0)

您需要使用React Router Redux