Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React Router not rendering my children elements inside my layout

app.js

import { Box } from '@mui/material';
import { BrowserRouter, Route, Routes } from 'react-router-dom'

// Components
import Home from './components/Home';
import Layout from './Layout';

const App = () => {
  return (
    <Box>
      <BrowserRouter>
        <Layout>
          <Routes>
            <Route exact path="/" component={Home} />
          </Routes>
        </Layout>
      </BrowserRouter>
    </Box>
  );
}

export default App;

layout

import React from 'react';
import { Outlet } from 'react-router-dom';

//components
import Navbar from './components/Navbar';

const Layout = () => {
  return (
    <React.Fragment>
      <Navbar />
      <Outlet />
    </React.Fragment>
  );
}

export default Layout;

Here the Home page that I want to show as children content inside the layout.

import React from 'react'
import Movies from './MoviesComponent'

const Home = () => {
  return (
    <>hello</>
  )
}

export default Home

I want to render the child components inside the layout. I have had trouble trying for a while, I was able to do it in an older version of react-router but in v6, things changed so much. I am trying to do the same but it doesn't work.

like image 647
Angel David Sulbaran Calderon Avatar asked Sep 19 '25 12:09

Angel David Sulbaran Calderon


2 Answers

From what I understand, Outlet is used when you have nested Route. https://reactrouter.com/en/main/components/outlet

That's not the case for your Layout. Try using children:

import React from 'react';

//components
import Navbar from './components/Navbar';

const Layout = ({ children }) => {
    return (
        <React.Fragment>
            <Navbar/>
            {children}
        </React.Fragment>
    );
}

export default Layout;
like image 99
OneQ Avatar answered Sep 22 '25 01:09

OneQ


please use

       import { createBrowserRouter } from 'react-router-dom';
    
    
        const router=createBrowserRouter([
          {
            path:'/',
            element:<Home/>
          },
          {
            path:'/Test',
            element:<Test payload={payload}/>
          }
        ]);
        
        root.render(
        <Layout router={router}>
     </Layout>
);

And inside Layout Component

import { Fragment } from "react"
import { RouterProvider } from "react-router-dom";

const Layout=({router})=>{
    return(<Fragment>
        <RouterProvider router={router}>
 </RouterProvider>
    </Fragment>)
}

Layout.displayName='Layout';

export default Layout;
like image 36
Naeem Ahmed Avatar answered Sep 22 '25 02:09

Naeem Ahmed