学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Django3.2 | 30 | QRオーダーシステムの構築 | メニューページ

[29 | QRコードプリント] << [ホーム] >> [31 | アイテム数の実装]

「QRMenu/qrmenu_react/src/pages」フォルダに「Menu.js」ファイルを新規作成します。
作成した「src/pages/Menu.js」ファイルを以下のように編集します。



新規作成 【Desktop/QRMenu/qrmenu_react/src/pages/Menu.js】

import { Container, Row, Col } from 'react-bootstrap';
import { useParams } from 'react-router-dom';
import React, { useState, useEffect } from 'react';
import { fetchPlace } from '../apis';

import MenuList from '../components/MenuList';

const Menu = () => {
    const [ place, setPlace ] = useState({});
    const params = useParams();

    const onFetchPlace = async () => {
        const json = await fetchPlace(params.id);
        console.log(json);
        if(json) {
            setPlace(json);
        }
    };

    useEffect(() => {
        onFetchPlace();
    }, []);

    return (
        <Container ClassName="mt-5 mb-5">
            <Row className="justify-content-center">
                <Col lg={8}>
                    <MenuList place={place} />
                </Col>
            </Row>
        </Container>
    )
};

export default Menu;



パスの設定をします。
「src/router/App.js」ファイルに記述を追加します。


記述追加 【Desktop/QRMenu/qrmenu_react/src/router/App.js】

import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { ToastContainer } from 'react-toastify';
import React from 'react';

import { AuthProvider } from '../contexts/AuthContext';
import PrivateRoute from './PrivateRoute';

import Home from '../pages/Home';
import Login from '../pages/Login';
import Register from '../pages/Register';
import Places from '../pages/Places';
import Place from '../pages/Place';
import Menu from '../pages/Menu';

function App() {
  return (
    <AuthProvider>
    <BrowserRouter>
      <Switch>
        <Route exact path='/'>
          <Home />
        </Route>
        <Route exact path='/login'>
          <Login />
        </Route>
        <Route exact path='/menu/:id/:table'>
          <Menu />
        </Route>
        <Route exact path='/register'>
          <Register />
        </Route>
        
        <PrivateRoute exact path='/places/:id'>
          <Place />
        </PrivateRoute>                  
        <PrivateRoute exact path='/places'>
          <Places />
        </PrivateRoute>        
      </Switch>
    </BrowserRouter>
    <ToastContainer />
    </AuthProvider>
  )
}

export default App;



「src/components」フォルダに「MenuList.js」ファイルを新規作成します。
作成した「MenuList.js」ファイルを以下のように編集します。



新規作成 【QRMenu/qrmenu_react/src/components/MenuList.js】

import React from 'react';
import styled from 'styled-components';
import MenuItem from './MenuItem';

const Place = styled.div`
    text-align: center;
    img {
        border-radius: 5px;
        margin-bottom: 20px;
        margin-top: 20px;
    }
`;

const MenuList = ({ place }) => {
    return (
        <>
        <Place>
            <img src={place.image} with={100} height={100} />
            <h3><b>{place.name}</b></h3>
        </Place>
        {place?.categories
            ?.filter(
                (category) => category.menu_items.filter((i) => i.is_available).length
            )
            .map((category) => (
                <div key={category.id} className="mt-5">
                    <h4 className="mb-4">
                        <b>{category.name}</b>
                    </h4>
                    {category.menu_items
                        .filter((item) => item.is_available)
                        .map((item) => (
                            <MenuItem key={item.id} item={item} />
                           
                        ))
                    }
                </div>
            ))
        }
        </>
    )
};

export default MenuList;



メニューリンクボタンをクリックすると、メニューが開くようになりました。

リンクボタンをクリック
リンクボタンをクリック


メニュー
メニュー



メニューアイテムを利用不可に変更すると、メニューの表示から外れるのを確認してください。


↓↓クリックして頂けると励みになります。


[29 | QRコードプリント] << [ホーム] >> [31 | アイテム数の実装]