タスク管理ツールをReact + ASP.Coreで作る022ナビゲーションバーを導入

[前回](https://qiita.com/mosuma/items/5b7ed9431633800e7cc6)の続きです。


# 概要

これまでの構築で、タスクの登録・編集・更新・削除と、認証機能などを構築してきました。
一方で一般的なサイトにあるようなサイトに入って、ログインして、作業をして、出ていくという通常動作の動線を作って行く上で、ナビゲーションバーは重要な役割を果たします。




### ガイド
全体Index：[タスク管理ツールをReact + ASP.Coreで作る - Index](https://qiita.com/mosuma/items/88e40dc44e7bff1a54d8)


## 流れ

- ナビゲーションバー用のコンポーネントを作る
- App.tsx内でコンポーネントを呼び出す

### ナビゲーションバー用のコンポーネントを作る
以下を作ります。
項目やドロップダウンなども入れてますが、現時点ではハリボテです。
今後ルーター等導入していった際に有効になるようにしていこうと思います。


```diff_tsx:NavBar.tsx

import React from 'react';
import { Container, Nav, Navbar, NavDropdown } from 'react-bootstrap';
import { UserInfo } from './app/models/Account';


interface Props {
    userInfo: UserInfo;
}

export const NavBar = ({userInfo}: Props) => {

    return(
        <Navbar bg="dark" variant="dark" expand="sm" className="border-bottom box-shadow mb-3">
            <Container>
                <Navbar.Brand>Tasket</Navbar.Brand>
                <Navbar.Toggle aria-controls="basic-navbar-nav" />
                <Navbar.Collapse id="basic-navbar-nav">
                    <Nav className="me-auto">
                        <Nav.Link >Tasks</Nav.Link>
                    </Nav>
                    <Nav>
                        <Nav.Link >PrivacyPolicy</Nav.Link>                        
                        {
                            userInfo.username ?
                                <NavDropdown title={userInfo.username} id="collasible-nav-dropdown-user">
                                    <NavDropdown.Item >register</NavDropdown.Item>  
                                    <NavDropdown.Divider />
                                    <NavDropdown.Item >Logout</NavDropdown.Item>
                                </NavDropdown>       
                                :
                                <Nav.Link>Login</Nav.Link>
                        }
                    </Nav>
                </Navbar.Collapse>
            </Container>
        </Navbar>
    )
}

```

### App.tsx内でナビゲーションバーのコンポーネントを呼び出す

以下の様になります。

```diff_tsx:NavBar.tsx

import { useEffect, useState } from 'react';
import './App.css';
import api from './app/api/api';
import { UserInfo } from './app/models/Account';
import Login from './components/Login';
import Register  from './components/Register';
import { TaskOperationMain } from './components/TaskOperationMain';
+ import { NavBar } from './NavBar';

function App() {

  
  const [userInfo, setUserInfo] = useState<UserInfo>({username: '',email: '',token: ''});
  
  useEffect(() => {
    const token = window.localStorage.getItem('tasket_jwt_token');
    try{
      api.Account.current().then(user => {
        window.localStorage.setItem('tasket_jwt_token', user.token);
        setUserInfo(user);
      });
      
    } catch (error) {
      console.log(error);
    }
  }, []);

  
  return (
+    <>
+      <NavBar userInfo={userInfo} />
+      {userInfo.username==='' ? 
+        <>
+          <Login setUserInfo={setUserInfo}/>
+          <Register /> 
+        </>
+        :
+        <TaskOperationMain />
+      }      
+     </>
  );
}
export default App;

```

## 動作させてみる

以下の様に、ナビゲーションバーが表示されました。
今回は以上です。続きは[次回](https://qiita.com/mosuma/items/27d5819e1a4db4d115d6)です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664470/0dcdcda0-3a61-d397-ad9b-4273b4667bdd.png)