当我在路由中使用渲染时反应返回 Outlet 组件

Posted

技术标签:

【中文标题】当我在路由中使用渲染时反应返回 Outlet 组件【英文标题】:React return Outlet component when I use render in route 【发布时间】:2022-01-23 01:44:22 【问题描述】:

我正在尝试使用带有 props id 的 react-router,但它给了我以下信息:

Matched leaf route at location "/some-12" does not have an element. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.

我正在使用“react-router-dom”:“6”和“react”:“^17.0.2”

//example Routes
import Route, Routes  from "react-router-dom";
function App()
return(
   <>
   <Routes>
      <Route path="/about" element=<About />/>
      <Route exec=true path="/something" element=<Something/>/>
      <Route exact=true path="/something-:id"
             render=(props) => 
             <Some id=props.match.params.id />;
       />
      <Route path="/contact" element=<Contact />/>
   </Routes>
   </>```
//example Some
export default function Some( id ) 
    return(
       <>
          <p>Some with id: id
       </>
    )

我哪里做错了?

【问题讨论】:

【参考方案1】:

react-router-dom 版本 6 中,Route 组件渲染了 element 属性上的所有路由组件,并且不再有任何路由属性,即没有 historylocationmatch

element 属性上渲染Some 组件并使用useParams 挂钩访问id 路由匹配参数。如果path="/something-:id" 不起作用,请尝试将id 设为自己的路径段,即path="/something/:id"

function App()
  return(
    <>
      <Routes>
        <Route path="/about" element=<About />/>
        <Route path="/something" element=<Something/>/>
        <Route path="/something-:id" element=<Some /> />
        <Route path="/contact" element=<Contact />/>
      </Routes>
    </>
  );

...

import  useParams  from 'react-router-dom';

export default function Some() 
  const  id  = useParams();
  return(
    <>
      <p>Some with id: id
    </>
  );

【讨论】:

感谢您的帮助【参考方案2】:

可能是您在元素属性中错过了 return 语句。

<Route exact=true path="/something-:id"
             render=(props) => 
             return <Some id=props.match.params.id />;
       />
// or

<Route exact=true path="/something-:id"
             render=(props) => <Some id=props.match.params.id />;/>

注意:经过进一步研究,渲染道具已在 v6 中删除。您应该改用 element 并按照Drew Reese's answer 获取:id

【讨论】:

以上是关于当我在路由中使用渲染时反应返回 Outlet 组件的主要内容,如果未能解决你的问题,请参考以下文章

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

反应路由器不渲染组件

反应路由器 dom 重定向问题。更改 url,不渲染组件

反应不渲染类

使用反应路由器 4 不渲染反应组件

反应路由器本机渲染链接组件超过前一个