I am new user of react i am trying to link pages but with bootstrap navigation but its not working.
I am tring to use the react router dom to make different pages so that it can go to different pages on click but the app does not compile since browser router is not being imported. I just copy pasted it straight from the website. Can someone tell me where the mistake is and how to fix it
It shows nothing on browser but a blank page![enter image description here] (https://i.stack.imgur.com/lf4Sz.png) here is the picture that shows some errors in console but not on browser
app,js
import Home from './Components/Home'
- import Contact from './Components/Contact'
- import About from './Components/About'
- import { BrowserRouter,
- Routes,Route } from 'react-router-dom'
- <BrowserRouter>
- <Routes>
- <Route path="/" element={<Home />}>
- <Route path="/About" element={<About />} />
- <Route path="/ContactUs" element={<Contact />} />
- </Route>
- </Routes>
- </BrowserRouter>
-
- navbar.js
- <Navbar expand="lg" >
- <Container>
- <Navbar.Toggle aria-controls="basic-navbar-nav" />
- <Navbar.Collapse id="basic-navbar-nav">
- <Nav className="me-auto">
- <LinkContainer to='/'>
- <Nav.Link >HOME</Nav.Link></LinkContainer>
- <LinkContainer><Nav.Link to="/About">ABOUT</Nav.Link></LinkContainer>
- <LinkContainer><Nav.Link to="/services">SERVICES</Nav.Link></LinkContainer>
- <LinkContainer> <Nav.Link to="/">WRITE</Nav.Link></LinkContainer>
-
- </Nav>
- </Navbar.Collapse>
- </Container>
- </Navbar>`
you need to nest your Navbar inside the BrowseerRouter tag.
Example:
<Header/>
<BrowserRouter>
<NavigationBar />
<Routes>
<Route path={"/"}></Route>
<Route path={"/example"}></Route>
</Routes>
</BrowserRouter>
Related
I'm using react routing for my site but on IPFS it doesn't work it's looking for a path that doesn't exist
<Nav className="">
<Nav.Link className="custom-link" to="/home" eventKey="1" href="/home">Home</Nav.Link>
<Nav.Link to="/dex" eventKey="2" href="/dex">DEX</Nav.Link>
<Nav.Link to="/defi" eventKey="3" >DEFI</Nav.Link>
<Nav.Link to="/nft" eventKey="3" >NFT</Nav.Link>
</Nav>
The Route
import {BrowserRouter,Route, Switch} from 'react-router-dom'
<BrowserRouter>
<Switch className ="switch">
<Route path="/" component={Home} exact />
<Route path="/home" component={Home} />
<Route path="/dex" component={Dex} />
</Switch>
</BrowserRouter>
Once deployed on IPFS if I click on a link I get;
ipfs resolve -r /ipfs/bafybeifwqscmvkuffygd7tqioy6fusuh3q7y4xlq7d7bfhkbkrsftcruoy/dex: no link named "dex" under bafybeifwqscmvkuffygd7tqioy6fusuh3q7y4xlq7d7bfhkbkrsftcruoy
How can I get my route to work on IPFS?
You'll have to use HashRouter instead of BrowserRouter:
https://reactrouter.com/web/api/HashRouter
How do I pass middleware to my router when using react router 4?
I'm sure I'm missing something obvious. Thanks!
Pretty standard react redux react-router set-up:
export default (
<Provider store={store}>
<BrowserRouter>
<div>
<Route exact path="/" component={Home} /> {/* index route */}
<Route path="/question/" component={Question} />
</div>
</BrowserRouter>
</Provider>
);
When a user clicks a link it will guide the user to a checkout page.
selectSlot(slot){
window.location = `/checkout/${slot.target.value}`
}
My approach won't keep the redux store values.
How can I keep those values?
Here are the router definitions
<Provider store={store}>
<ConnectedRouter history={history}>
<Router>
<Switch>
<Route exact path="/" component={MainLayout} />
<Route exact path="/index.html" component={MainLayout} />
<Route path="/checkout" component={CheckoutLayout} />
<Route component={NotFound}/>
</Switch>
</Router>
</ConnectedRouter>
</Provider>
I am using Link from react-router-dom for the purpose and works for me. You can read about it here
I'd like to render some routes with a nav at the top, while rendering other routes (like a sign-up / sign-in page) without any nav.
For the setup with the nav, I have:
const App = () => (
<Router>
<div>
<Nav />
<div>
<Route exact path="/" component={Home} />
<Route path="/account" component={Account} />
<Route path="/news" component={News} />
</div>
<Footer />
</div>
</Router>
);
I'm trying to find the best way of handling this with React Router (seems like it would have to handled with some type of conditional maybe? - "if my current route matches any one of these routes, then render like so else render this.").
Thanks!
You have at least two possibilities:
Use Route "path" property to test the route and render the component. Path property accepts path.to.regexp expressions.
Wrap your component with withRouter method and inside Nav test if the route matches and render null otherwise.
First answer:
const App = () => (
<Router>
<div>
<Route path="/(?!signin|signup)" component={Nav}/>
<div>
<Route exact path="/" component={Home} />
<Route path="/account" component={Account} />
<Route path="/news" component={News} />
</div>
<Footer />
</div>
</Router>
);
Second answer:
import { withRouter } from 'react-router'
const NavWithRouter = withRouter(Nav);
const App = () => (
<Router>
<div>
<NavWithRouter/>
<div>
<Route exact path="/" component={Home} />
<Route path="/account" component={Account} />
<Route path="/news" component={News} />
</div>
<Footer />
</div>
</Router>
);
<Route
path={`foo/(A|B|C)`}
component={() => (<Baz {...props}/>)}
/>
Where A,B,C are the different routes like foo/A.
I usually use two different Layout pages. And within the Layout pages, have a router for the content.
My code will look like this:
<Router>
<Route path="/login" component={AuthLayout} />
<Route path="/logout" component={AuthLayout} />
<Route path="/some/path" component={Layout} />
</Router>
Within each Layout, there will be the usual header / footer / navbars and then another set of routes.
<div className="auth-layout">
<header className="auth-layout__header"></header>
<main className="auth-layout__content">
<Switch>
<Route path="/login" component={Login} />
<Route path="/logout" component={Logout} />
</Switch>
</main>
</div>
In this way, I have a direct mapping from requirements to code. In my code, there are much more differences between the two layouts.
Just use a prop for this & inside the children your are able to conditional render the nav.
<Route exact path="/" render={() => <Home hasNav={false} />}
I'm trying to set up some nested routes to add a common layout. Check the code out:
<Router>
<Route component={Layout}>
<div>
<Route path='/abc' component={ABC} />
<Route path='/xyz' component={XYZ} />
</div>
</Route>
</Router>
While this works perfectly fine, I still get the warning:
Warning: You should not use <Route component> and <Route children> in the same
route; will be ignored
CESCO's answer renders first the component AppShell then one of the components inside Switch. But these components are NOT going to render inside AppShell, they will NOT be children of AppShell.
In v4 to wrap components you don't put anymore your Routes inside another Route, you put your Routes directly inside a component.
I.E : for the wrapper instead of <Route component={Layout}> you directly use <Layout>.
Full code :
<Router>
<Layout>
<Route path='/abc' component={ABC} />
<Route path='/xyz' component={XYZ} />
</Layout>
</Router>
The change is probably explained by the idea to make React Router v4 to be pure
React so you only use React elements like with any other React element.
EDIT : I removed the Switch component as it's not useful here. See when it's useful here.
You need to use the switch component to nesting to work nice. Also, see this question
// main app
<div>
// not setting a path prop, makes this always render
<Route component={AppShell}/>
<Switch>
<Route exact path="/" component={Login}/>
<Route path="/dashboard" component={AsyncDashboard(userAgent)}/>
<Route component={NoMatch}/>
</Switch>
</div>
And version-4 components do not take children, instead, you should use the render prop.
<Router>
<Route render={(props)=>{
return <div>Whatever</div>}>
</Route>
</Router>
Try:
<Router>
<Layout>
<Route path='/abc' component={ABC} />
<Route path='/xyz' component={XYZ} />
</Layout>
</Router>
If you do not want Layout to run at loaded. Use this method:
<div className="container">
<Route path="/main" component={ChatList}/>
<Switch>
<Route exact path="/" component={Start} />
<Route path="/main/single" component={SingleChat} />
<Route path="/main/group" component={GroupChat} />
<Route path="/login" component={Login} />
</Switch>
</div>
Whenever history changes, componentWillReceiveProps in the ChatList will run.
You can also try this :
<Route exact path="/Home"
render={props=>(
<div>
<Layout/>
<Archive/>
</div>
)}
/>