React Router URL 有效但组件无效

Posted

技术标签:

【中文标题】React Router URL 有效但组件无效【英文标题】:React Router URL works but not Component 【发布时间】:2021-04-07 09:25:01 【问题描述】:

React Router 更改了 URL,但组件没有更新。我检查了 *** 的许多解决方案,但仍然没有用。 这是我的代码: App.js:

function App() 
  return (
        <div className="App">
                <Header />
                <Sidebar />
          <Switch>
              <Route exact path='/' component=withRouter(Dashboard) />
              <Route path='/invoices/:objectId' component=withRouter(Table) />
          </Switch>
        </div>
  );


export default App;

侧边导航:

    function Sidebar()

    return(
        <div className="sidebar-wrapper">
            <div className="sidenav">
                <NavLink to='/'>Dashboard</NavLink>
                <NavLink to='/invoices/1'>Test1</NavLink>
                <NavLink to='/invoices/2'>Test2</NavLink>
                <NavLink to='/invoices/3'>Test3</NavLink>
            </div>
        </div>
    );

export default Sidebar;

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import  BrowserRouter  from "react-router-dom";
import './static/index.css';
import App from './App';

ReactDOM.render(
    <React.StrictMode>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </React.StrictMode>,
  document.getElementById('root')
);

我对 React 并不陌生,并且愿意对我的代码进行任何其他改进。

【问题讨论】:

这似乎是两条路线上的相同组件(您没有显示)。 是的,首先它没有参数,并且按预期为空。但是当我尝试跳过其他人时,它不会重新加载组件。编辑:更改它以消除任何混乱。 【参考方案1】:

您的组件已经包装在 Route... /&gt; 组件中,为什么还要将它们包装在 withRoute 中? 我认为没有理由这样做。

请阅读this。

【讨论】:

感谢您的建议。我阅读了文档并删除了用法。【参考方案2】:

其他路线只需传递exact 道具

<Switch>
  <Route exact path='/' component=withRouter(Dashboard) />
  <Route exact path='/invoices/:objectId' component=withRouter(Table) />
</Switch>

【讨论】:

我试过了。它加载仪表板,然后加载我单击的第一个 NavLink。然后当我单击其他 NavLink 时不会更改。但是当我点击仪表板时,它又可以工作了。 @HürkanDoğan 您的问题与 React-Router 无关。这与您实现 Table 组件的方式有关,当 :objectId 更改时不会重新渲染【参考方案3】:

我从另一篇与此问题相关的帖子中找到了针对我的情况的解决方案: Component does not remount when route parameters change

    useEffect(() => 
            retrieveInvoices();
        , [props.match.params.objectId]);

我已将 props 作为依赖项传递到我的表组件中,现在每次更改 URL 参数时它都会重新加载我的数据。其他帖子中提供了其他更好的处理方式。

【讨论】:

以上是关于React Router URL 有效但组件无效的主要内容,如果未能解决你的问题,请参考以下文章

无法导航到 react-router-dom URL

单击链接时React Router V5不渲染路由,但后退和前进按钮有效?

使用 React Router 更改 URL 但组件未呈现?

React-router-dom更改URL但不更新样式组件的ThemeProvider的内容

React.jsx:类型无效 - 需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)但得到:未定义

React Router