React Router 更改参数不会触发 componentWillRecieveProps

Posted

技术标签:

【中文标题】React Router 更改参数不会触发 componentWillRecieveProps【英文标题】:React Router changing params doesn't fire componentWillRecieveProps 【发布时间】:2017-11-07 17:41:41 【问题描述】:

问题:更改<Route /> 组件的参数不会更新它正在呈现的组件。路由变化显示在 URL 栏中,但直接渲染 this.props.match.params.id 会显示旧的 :id 而不是 URL 栏中反映的新的。

更新:我通过将 <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

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

【问题讨论】:

当更改路由时console.log("getProps") 正在控制台中打印? 不,不是。这就是为什么我很困惑 【参考方案1】:

您需要使用React Router Redux

【讨论】:

以上是关于React Router 更改参数不会触发 componentWillRecieveProps的主要内容,如果未能解决你的问题,请参考以下文章

触发 Redux 操作以响应 React Router 中的路由转换

React router 4 history.listen 永远不会触发

Redux-Toolkit 和 React Hooks - 存储更改不会触发重新渲染

当 UI-Router ES6 中的状态更改时,$stateChangeStart 不会被触发?

React useEffect 不会在路由更改时触发

React Router v4 路由参数不渲染/刷新