使用react-router-dom‘S嵌套管线是否会迫使您渲染嵌套管线组件within父管线组件?我对航线是新手,我正在努力理解.

我有一个下面模拟的Reaction应用程序,我在开发过程中引入了react-router-dom V6.ComponentView根据标题props 渲染所需的组件.我已经设置了如下路由,其中"/a""/b"被映射到根据标题值呈现的ComponentView组件.我想要的是在不更改组件 struct 的情况下使"/b"成为"/a"的嵌套路由.这有可能吗?

我试着像这样重组航线:

<Route path="a" element={<ComponentView title="a" />}>
  <Route path="b" element={<ComponentView title="b" />} />
</Route>

...但如果我导航到"/a/b",我得到的相当于"/a".

到目前为止,根据我对Reaction路由的了解,如果我想让"/b"成为"/a"的子集,这意味着在"/b"中呈现的组件将呈现in addition to,无论组件(S)由"/a"呈现.有没有办法在不嵌套内容的情况下嵌套路径?

App.js

import React from "react";
import { Route, Routes } from 'react-router-dom';
import './App.css';
import { Home } from "./components/Home"
import { ComponentView } from "./components/ComponentView";

function App() {
  return (
    <div className="App">
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="a" element={<ComponentView title="a" />} />
        <Route path="b" element={<ComponentView title="b" />} />
      </Routes>
    </div>
  );
}
export default App;

ComponentView.js

import { ComponentA } from "./ComponentA";
import { ComponentB } from "./ComponentB";

export function ComponentView(props) {
  return (
    <div>
      {props.title === "a" ? (
        <ComponentA title={props.title} />
        ) : (
        <ComponentB title={props.title} />
      )}
    </div>
  );
}

ComponentA.js

export function ComponentA(props) {
  return(
    <div>
      <div style={{ height: "5rem", width: "100%" }}>
        Component A - title: {props.title}
      </div>
    </div>
  );
}

ComponentB.js

export function ComponentB(props) {
  return(
    <div>
      <div style={{ height: "5rem", width: "100%" }}>
        Component B - title: {props.title}
      </div>
    </div>
  );
}

推荐答案

ComponentView不会为嵌套路由呈现Outlet来呈现其element内容,因此

<Route path="a" element={<ComponentView title="a" />} >
  <Route path="b" element={<ComponentView title="b" />} />
</Route>

仅渲染<ComponentView title="a" />,则嵌套管线不可访问/渲染.

如果我的理解是正确的,您希望仅在路径为"/a"时呈现ComponentA,并希望在路径"/a/b"上呈现ComponentB,那么重构将呈现<ComponentView title="a" />的路由作为索引路由"/a",并将<ComponentView title="b"/>呈现为嵌套的"b"路由"/a".这样,每一个都将呈现为独立于另一个.

示例:

function App() {
  return (
    <div className="App">
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="a">
          <Route index element={<ComponentView title="a" />} />
          <Route path="b" element={<ComponentView title="b" />} />
        </Route>
      </Routes>
    </div>
  );
}

Javascript相关问答推荐

我的JS代码将按照哪个序列被解释

Angular:ng-contract未显示

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

对象和数字减法会抵消浏览器js中的数字

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

按钮未放置在html dis位置

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

D3 Scale在v6中工作,但在v7中不工作

未捕获错误:[]:getActivePinia()被调用,但没有活动Pinia.🍍""在调用app.use(pinia)之前,您是否try 使用store ?""

处理时间和字符串时MySQL表中显示的日期无效

屏幕右侧屏障上的产卵点""

如何用拉威尔惯性Vue依赖下拉?

使用原型判断对象是否为类的实例

从另一个数组中的对应行/键值对更新数组中的键值对对象

使用自动识别发出信号(&Q)

处理TypeScrip Vue组件未初始化的react 对象

react -原生向量-图标笔划宽度

JavaScript将字符串数字转换为整数

与在编剧中具有动态价值的定位器交互

如何使用Reaction路由导航测试挂钩?