Converting a site from HTML to Gatsby I have a basic Bootstrap 4 navigation:
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand logo" href="/">
<!-- SVG Logo -->
</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
Menu
<i class="fas fa-bars"></i>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a href="#" class="nav-link">Home</a>
</li>
</ul>
</div>
</div>
</nav>
In gatsby-config.js I have defined my menu and I can query and pass down from index.js to my Navigation.js component. Per memory the navbar is built as a list when I referenced the Navbar docs. When I research the documentation for React Bootstrap and other examples everything is built as a href
inside a div
and there are multiple ways it's written, examples:
reference Q&A: React-Bootstrap link item in a navitem
code:
<Nav.Link as={Link} eventKey={l.link}>
{l.name}
</Nav.Link>
renders:
<a aria-current="page" class href=""><li data-rb-event-key="/" class="nav-link">home</li></a>
<a href="/mon"><li data-rb-event-key="mon" class="nav-link">Monday</li></a>
<a href="/tues"><li data-rb-event-key="tues" class="nav-link">Tuesday</li></a>
reference repo: Gatsby React Bootstrap Start
code:
<Link key={k} to={l.link}>
<Nav.Link as="li" eventKey={l.link}>
{l.name}
</Nav.Link>
</Link>
renders:
<div class="justify-content-end navbar-nav">
<a aria-current="page" class="" href="/">
<li data-rb-event-key="/" class="nav-link">home</li>
</a>
<a href="/mon">
<li data-rb-event-key="mon" class="nav-link">Monday</li>
</a>
<a href="/tues">
<li data-rb-event-key="tues" class="nav-link">Tuesday</li>
</a>
</div>
Full component for reference:
Navigation.js:
import React from 'react'
import { Link } from 'gatsby'
// Components
import Logo from './Logo'
// Bootstrap
import { Navbar, Container, Nav } from 'react-bootstrap'
// React Icons
import { GoThreeBars } from 'react-icons/go'
const Navigation = ({ menuLinks }) => {
return (
<Navbar id="headNav" collapseOnSelect expand="lg">
<Container>
<Navbar.Brand href="/">
<Logo id="logo" />
</Navbar.Brand>
<Navbar.Toggle
className="navbar-toggler navbar-toggler-right"
aria-controls="responsive-navbar-nav"
>
Menu <GoThreeBars />
</Navbar.Toggle>
<Navbar.Collapse id="responsive-navbar-nav" className="collapse navbar-collapse">
<Nav className="justify-content-end">
{menuLinks.map((l, k) => (
<Link key={k} to={l.link}>
<Nav.Link as="li" eventKey={l.link}>
{l.name}
</Nav.Link>
</Link>
))}
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
)
}
export default Navigation
In React Bootstrap what is the proper way to write links so that it will replicate the Bootstrap 4 documentation and the sample above? Do I need to use Link
from Gastby and Nav.Link
from React Bootstrap together?