[React]ルーティング

フッターにボトムナビゲーションコンポーネントを使用し、選択したナビゲーションによって表示を変化させる

import React, { useEffect } from "react";
import { Box, Button, makeStyles } from "@material-ui/core";
import { useApp } from '../context'
import VideoChatContainer from "./VideoChatContainer";
import { Footer } from "./Footer";

// スタイルの記述をする
const useStyles = makeStyles(theme => ({
	outer: {
	  position: "absolute",
	  width: window.parent.screen.width,
	  height: window.parent.screen.height,
	  margin: "0 auto",
	  padding: theme.spacing(0),
	  alignItems: "center",
	  justifyContent: "center",
	//   backgroundColor: theme.palette.background.default
	backgroundColor: "gold",
	},
 
	inner: {
	  width: "100px",
	  minHeight: "20px",
	  maxHeight: "30px",
 
	  margin: "8px",
	  padding: theme.spacing(4),
 
	  display: "flex",
	  alignItems: "center",
	  justifyContent: "center"
	}
 }));
// 
export const Home = ({handleLogout}) => {	
	const { state, dispatch } = useApp();
	const classes = useStyles();

	const changePage = () => {
		if (state.page == 0) {
			return (
				<div>
					<VideoChatContainer />
					<Button className={classes.inner} variant="contained" color="primary" onClick={handleLogout}>ログアウト</Button>
				</div>
			)
		} else if (state.page == 1) {
			return (
				<div>
					page = 1
				</div>
			)
		} else if (state.page == 2) {
			return (
				<div>
					page = 2
				</div>
			)
		}
	};
	return (
		<Box className={classes.outer}>
			{changePage()}
			<Footer dispatch={dispatch} />
		</Box>		
		);
}

フッターコンポーネントにグローバルな状態管理をする関数dispatchを渡している。このdispatchをBottomNavigationのonChange()のなかに含める。

フッターのコード

import React, { useState } from "react";
import { BottomNavigation, BottomNavigationAction, makeStyles } from "@material-ui/core";
import RestoreIcon from '@material-ui/icons/Restore';
import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';
import LocationOnIcon from '@material-ui/icons/LocationOn';
// import { useApp } from '../context'

// スタイルの記述をする
const useStyles = makeStyles(theme => ({  
	bottomContainer: {
       position: 'relative',
       bottom: '0px',
       // margin: '0',
	}
 }));
// 
export const Footer = ({dispatch}) => {	
   const [navValue, setNavValue] = useState(0);
	const classes = useStyles();
	return (
		<BottomNavigation
           value={navValue}
           onChange={(event, newValue) => {
               console.log('newValue : ', newValue);
               setNavValue(newValue);
               dispatch({type: 'SET_PAGE', payload: newValue});
           }}
           showLabels
           className={classes.bottomContainer}
           >
           <BottomNavigationAction label="Recents" icon={<RestoreIcon />} />
           <BottomNavigationAction label="Favorites" icon={<FavoriteBorderIcon />} />
           <BottomNavigationAction label="Nearby" icon={<LocationOnIcon />} />
       </BottomNavigation>
		);
}

いいなと思ったら応援しよう!