[React Bootstrap] Navs を表示してみる | 心を無にして始める React

今回は、Nav コンポーネントを表示します。

準備
まだ components フォルダがなければ作ります。
src
を右クリックして New Folder
。

components と入力してフォルダを作ります。

今回は、components フォルダに Nav のコンポーネントを作って、表示してみます。
公式のドキュメントはここ。
https://react-bootstrap.netlify.app/components/navs/
Nav コンポーネントをつくる
component フォルダに Nav.js
を作ります。
Nav.js
を心を無にして編集してみます。
import React from 'react';
import { Nav as BootstrapNav } from 'react-bootstrap';
import NavLink from './NavLink';
function Nav(props) {
const {
children,
...otherProps
} = props;
return (
<BootstrapNav {...otherProps}>
{children}
</BootstrapNav>
);
}
export default Object.assign(Nav, {
Link: NavLink,
});
NavItem.js
も続けて作ります。
import React from 'react';
import { Nav as BootstrapNav } from 'react-bootstrap';
function NavLink(props) {
const {
children,
...otherProps
} = props;
return (
<BootstrapNav.Link {...otherProps}>
{children}
</BootstrapNav.Link>
);
}
export default NavLink;
プロジェクトでは、コンポーネントを統一したデザインで利用することが多いです。
そのため、(React Bootstrap のコンポーネントをその場その場でカスタマイズしながら使うよりも、)プロジェクトでコンポーネントにしたものを使うほうが、変更をお手軽に漏れなくできることが多いです。
Nav コンポーネントを表示する
それでは、 App.js
を編集して Nav コンポーネントを表示します。
import React from 'react';
import './App.css';
import Nav from './components/Nav';
function App() {
return (
<div className="p-5 bg-info">
<div className="d-flex">
<Nav defaultActiveKey="/home" className="flex-column bg-light rounded">
<Nav.Link href="/home">Active</Nav.Link>
<Nav.Link eventKey="link-1">Link</Nav.Link>
<Nav.Link eventKey="link-2">Link</Nav.Link>
<Nav.Link eventKey="disabled" disabled>
Disabled
</Nav.Link>
</Nav>
</div>
</div >
);
}
export default App;
画面を確認してみます。

はい、できました。