본문 바로가기

redux

리덕스_10_게시글 상세내역 보기

2020/06/06 - [redux] - 리덕스_9_게시글 내용 보기

 

리덕스_9_게시글 내용 보기

2020/06/06 - [redux] - 리덕스_8_리스트 조회하기 리덕스_8_리스트 조회하기 망고플레이트를 예시로 사용해봅니다. https://www.mangoplate.com/ 망고플레이트: 나만의 맛집 검색 솔직하고 거짓없는 리뷰로 나

wastetime.tistory.com

1. foodAction.js를 만든다. 여기서 함수를 만들어준다. 

action 함수를 만들어서 쓰면 더 편하다. 

import {FETCH_FOOD_DETAIL} from "./types";
import axios from 'axios'

export function fetchFoodDetail(no) {
    return function (dispatch) {
        axios.get('http://localhost:3355/food_detail',{
            params:{
                no:no
            }
        }).then((result)=>dispatch({
            type:FETCH_FOOD_DETAIL,
            payload:result.data
        }))
    }
}

 

2. FoodDetail을 구성한다. 

import React, {useEffect, useState} from "react";
import {fetchFoodDetail} from "../actions/foodActions";
import {useDispatch, useSelector} from "react-redux";

export default function FoodDetail(props) {
    const dispatch= useDispatch();
    const{match}= props
    useEffect(()=>{
        dispatch(fetchFoodDetail(match.params.no))
    },[])

    const  food_data =useSelector((state)=>state.foods.food_detail)
    const image2 = String(food_data.image)
    const image = image2.split(",")
    const html=image.map((m)=>
            <td>
                <img src={m} width={"200"} height={"200"}/>
            </td>
    )
    return(
        <div className={"row"}>
            <table>
                <tr>
                    {html}
                </tr>
                <tr>
                    <td className={"text-center"} colSpan={"4"}></td>
                    {food_data.title}
                </tr>
                <tr>
                    <td width={"10%"}>주소</td>
                    <td colSpan={"3"}>{food_data.address}</td>
                </tr>
                <tr>
                    <td width={"10%"}>전화</td>
                    <td colSpan={"3"}>{food_data.tel}</td>
                </tr>
                <tr>
                    <td width={"10%"}>음식종류</td>
                    <td colSpan={"3"}>{food_data.kind}</td>
                </tr>
                <tr>
                    <td width={"10%"}>가격대</td>
                    <td colSpan={"3"}>{food_data.price}></td>
                </tr>
            </table>
        </div>
    )
}

3. 클릭 이벤트를 준다. 

  CateFood.js에서 값을 넘겨주어야 한다. NavLink를 이용하면 된다.

 App.js에서 path를 <Route path={"/food_detail/:no"} component={FoodDetail}/>이렇게 수정해준다.

 <NavLink to={"/food_detail/"+m.no}>
<img src={m.image.substring(0,m.image.indexOf(","))} width={"100%"}/>
</NavLink>

*값이 안넘어 갈 경우 server를 보면 된다. 

app.get('/food_detail',(request,response)=>{
    var no = request.query.no;
    var url="mongodb://211.238.142.181:27017";//몽고디비 주소
    Client.connect(url,(err,client)=>{
        var db=client.db('mydb');
        db.collection('food').find({no:Number(no)})
            .toArray((err,docs)=>{
                // 요청한 사용자 => 데이터 전송
                response.json(docs[0]);
                console.log(docs)
                client.close();
            })
    })
})

결과) 음식점을 하나 누르면 이렇게 이미지와 정보가 나온다. 

반응형

'redux' 카테고리의 다른 글

리덕스_9_게시글 내용 보기  (0) 2020.06.06
리덕스_8_리스트 조회하기  (0) 2020.06.06
리덕스는 무엇일까?  (0) 2020.06.06
리덕스 _ 환경설정  (0) 2020.05.23