【问题标题】:React Router Navigate Issue in Semantic Ui React语义UI React中的React Router Navigate问题
【发布时间】:2021-10-15 10:44:12
【问题描述】:

我在通过 Route 导航页面时遇到问题。 我使用语义 ui react 组件来处理这个问题。

当我在导航栏中链接任何项目时,url 会像 http://localhost:3000/ 更改为 http://localhost:3000/list 但相关组件页面无法打开。

我该如何解决?

这是我的 index.js 代码,如下所示。

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

这是我的 App.js 代码,如下所示。

function App() {
  return (
    <div className="App">
      <Container style={{"marginTop": "20px"}}>
        <Header />
        <Route path="/">
          <AccordionComponent items={items} />
        </Route>
        <Route path="/list">
          <Search />
        </Route>
        <Route path="/dropdown">
          <DropdownForm options={options}/>;
        </Route>
        <Route path="/translate">
          <Translate />
        </Route>

      </Container>
    </div>
  );
}

export default App;

这是我的路由组件,如下所示。

const Route = ({ path, children }) => {
    return window.location.pathname === path ? children : null;
  };
  
export default Route;

这是我的 Header 组件,如下所示。

import React, { useState } from 'react';
import { Menu } from 'semantic-ui-react'
import { Link } from "react-router-dom";

const Header = () => {

  const [activeItem, setActiveItem] = useState('Accordion');

  const handleItemClick = (name) => setActiveItem(name)

  return (
    <Menu secondary pointing>
        <Menu.Item
          as={Link} to="/"
          name='Accordion'
          active={activeItem === 'Accordion'}
          onClick={() => handleItemClick('Accordion')}
        />
        <Menu.Item
          as={Link} to="/list"
          name='Search'
          active={activeItem === 'Search'}
          onClick={() => handleItemClick('Search')} 
        />
        <Menu.Item
          as={Link} to="/dropdown"
          name='Dropdown'
          active={activeItem === 'Dropdown'}
          onClick={() => handleItemClick('Dropdown')} 
        />
        <Menu.Item
          as={Link} to="/translate"
          name='Translate'
          active={activeItem === 'Translate'}
          onClick={() => handleItemClick('Translate')}
        />
      </Menu>

  );
};

export default Header;

【问题讨论】:

    标签: javascript reactjs routes


    【解决方案1】:

    以 Switch 为例来包装路由:

    function App() {
      return (
        <div className="App">
          <Container style={{"marginTop": "20px"}}>
            <Header />
            <Switch>
            <Route path="/">
              <AccordionComponent items={items} />
            </Route>
            <Route path="/list">
              <Search />
            </Route>
            <Route path="/dropdown">
              <DropdownForm options={options}/>;
            </Route>
            <Route path="/translate">
              <Translate />
            </Route>
            </Switch>
          </Container>
        </div>
      );
    }
    
    export default App;
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

    文档:https://reactrouter.com/web/api/Switch

    【讨论】:

    • 相关组件无法打开。
    • @TonyBrand 我不明白你创建的 Route 组件,Route 是 react-router-dom 库中的一个组件,它可能与同名冲突?
    • 我也使用了 react-router 中的 Route 但它不起作用。
    • @TonyBrand 您使用了带有 Switch 组件的 react-router 中的 Route 并且没有工作...并且可能在导入或导出中出现某种错误...您能否在 codeSandbox 中提供一个示例一起玩?
    • Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2019-05-19
    • 2017-05-13
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多