当我点击导航时.链接在我的SPA应用程序中,整个页面重新呈现,但我只希望UI主要部分中的内容根据单击的链接进行更改.在布局中,我有一个标题导航,然后是一行两列.标题导航的内容从不更改,左栏是可单击导航链接的静态列表.我想更改的唯一内容是基于单击的链接的右侧列的内容,我不想重新呈现整个应用程序,只想呈现该列的内容.

应用程序.js公司

const rootElement = document.getElementById('root');
const root = createRoot(rootElement);

root.render(
  <React.StrictMode>
    <BrowserRouter>
      <通用组件/>
    </BrowserRouter>
  </React.StrictMode>
);

通用组件

    <>
      <Navbar>
        <div></div>
      </Navbar>
      <Container fluid>
        <Row>
          <Col xs={4} sm={4} md={4} lg={3} xl={2}>
            <Nav.Item href="/a">
              <Nav.Link href="a">Comp A</Nav.Link>
            </Nav.Item>
            <Nav.Item>
              <Nav.Link href="b">Comp B</Nav.Link>
            </Nav.Item>
            <Nav.Item>
              <Nav.Link href="c">Comp C</Nav.Link>
            </Nav.Item>
            <Nav.Item>
              <Nav.Link href="d">Comp D</Nav.Link>
            </Nav.Item>
          </Col>
          <Col xs={8} sm={8} md={8} lg={9} xl={10}>
            <Routes>
              <Route path="/" element={<Navigate to="a" replace />} />
              <Route path="/a" element={<CompA {...props} />} />
              <Route path="/b" element={<CompB {...props} />} />
              <Route path="/c" element={<Compc {...props} />} />
              <Route path="/d" element={<CompD {...props} />} />
            </Routes>
          </Col>
        </Row>
      </Container>
    </>

CompA、CompB等只是不同的形式,并不复杂.然而,任何点击侧导航链接都会呈现整个应用程序.

推荐答案

我认为问题在于,默认情况下,Nav.Link组件呈现原始锚标记.不过,您需要渲染react-router-dom Link组件.

try 从react-router-dom导入Link并将其渲染为Nav.Link组件.

Nav.Link props.

Link传递给Nav.Link组件的asprops ,并将Link组件的目标从href更改为to.您可能还希望使用绝对路径.

例子:

import { Link, Routes, Route } from 'react-router-dom';

...

<>
  <Navbar>
    <div></div>
  </Navbar>
  <Container fluid>
    <Row>
      <Col xs={4} sm={4} md={4} lg={3} xl={2}>
        <Nav.Item href="/a">
          <Nav.Link as={Link} to="/a">Comp A</Nav.Link>
        </Nav.Item>
        <Nav.Item>
          <Nav.Link as={Link} to="/b">Comp B</Nav.Link>
        </Nav.Item>
        <Nav.Item>
          <Nav.Link as={Link} to="/c">Comp C</Nav.Link>
        </Nav.Item>
        <Nav.Item>
          <Nav.Link as={Link} to="/d">Comp D</Nav.Link>
        </Nav.Item>
      </Col>
      <Col xs={8} sm={8} md={8} lg={9} xl={10}>
        <Routes>
          <Route path="/" element={<Navigate to="/a" replace />} />
          <Route path="/a" element={<CompA {...props} />} />
          <Route path="/b" element={<CompB {...props} />} />
          <Route path="/c" element={<Compc {...props} />} />
          <Route path="/d" element={<CompD {...props} />} />
        </Routes>
      </Col>
    </Row>
  </Container>
</>

Reactjs相关问答推荐

Inbox Enum类型以React组件状态时出现TypScript错误

在Redux工具包查询中,是否可以将标记应用到API切片内的所有端点?

在Reaction中单击时,按钮未按预期工作

将对象添加到集合中的数组时的no_id字段

为多租户SSO登录配置Azure AD应用程序

当useEffect和onClick处理程序都调用useCallback函数时,有没有办法对useEffect产生额外的影响?

如何解决Reaction中遗留的上下文API错误?

使用Ionic 7和React 18,如何访问历史对象以在页面之间导航?

.populate() 方法在 mongodb 中不起作用

Syncfusion:带有 TabItemsDirective 的选项卡组件不显示任何内容

如何将 DocuSign 控制台界面嵌入到 React 应用中

Material UI @mui/material/Button vs @material-ui/core/Button,它什么时候改变的,旧版本的文档在哪里

如何在react 中正确销毁上下文?

无法在 reactJS 中使用空包装器 <>

从一个获取 axios 请求(ReactJS)中删除默认参数

setState 改变对象引用

react-admin useGetIdentity 只返回全名,id 未定义 头像未定义

您无权使用阻止 webRequest 侦听器.请务必在 list 中声明 webRequestBlocking 权限

Select MenuItem 时 Material-ui 不更改样式

有没有办法只针对 React map 中的一个按钮?