본문 바로가기
WEB/Front-end

context, 페이지 라우팅 (React.js_04)

by 최새벽 2024. 10. 15.

#01. Context

 

[Context]

리액트에서 자식의 자식 컴포넌트에게 데이터를 직접 전달하지 못하는 문제(Props Drilling)를 해결하기 위해서 사용

- createContext : 생성

- Consumer : 소비자

- Provider : 공급자

 

context가 여러 컴포넌트를 하나의 context로 묶을 수 있음

(388p 그림 참고)

 

- React를 import하여 사용, 컨텍스트 변수는 컴포넌트 바깥에 선언(App  function 바깥에 선언)

import React, { useReducer, useRef, useCallback } from 'react';
const TodoContext = React.createContext(); // 컨텍스트 변수는 컴포넌트 바깥에 선언

 

- 감싸고자 하는 컴포넌트 감싸기

            <TodoContext.Provider value={{ todo, onCreate, onUpdate, onDelete }}>
                <TodoEditor />
                <TodoList />
            </TodoContext.Provider>

 

 

-메인(App.js) 파일에서 컨텍스트 export하고 자식 컴포넌트에서 해당 컨텍스트 import받기, useContext로 컨텍스트가 전달하는 데이터를 storeData에 저장

export const TodoContext = React.createContext(); // 컨텍스트 변수는 컴포넌트 바깥에 선언
import { TodoContext } from '../App'; // (TodoList에서 import 받음)
....
const TodoList = ({전달 데이터}) => {
...
    const storeData = useContext(TodoContext);
...}

 

- 코드에서 이전에 넘겨주기 용으로만 작성했던 코드 생략하기

- 컨텍스트 잘못 사용하면 기능과 관련없는 컴포넌트들이 한번에 업데이트 되어서 비효율적일 수 있다

 

[기능에 따른 Context 분리]

- 기능에 따른 정의, 넘기는 데이터 다르게 

export const TodoStateContext = React.createContext(); // 컨텍스트 변수는 컴포넌트 바깥에 선언
export const TodoDispatchContext = React.createContext();
            <TodoStateContext.Provider value={{ todo }}>
                <TodoDispatchContext.Provider
                    value={{ onCreate, onDelete, onUpdate }}
                >
                    <TodoEditor />
                    <TodoList />
                </TodoDispatchContext.Provider>
            </TodoStateContext.Provider>

 

 

#02. 페이지 라우팅

 

[ 페이지 라우팅 ]

- 패키지 관리 도구: npm, npx, yarn

- 파라미터 받는 방법

1. url 파라미터(라우터변수, 동적경로) :useParams();

2. 쿼리스트링: useLocation(), useSearchParams(), http://localhost:3000/?sort=latest 와 같은 url에서 sort 값을 받아옴.

'WEB > Front-end' 카테고리의 다른 글

어쩌다 Vue.js 02 _ 네이버 지도 api  (0) 2024.12.10
어쩌다 Vue.js 01 _ 환경설정  (0) 2024.11.30
웹 스토리지 (React.js)  (0) 2024.08.23
API활용, axios (React.js)  (0) 2024.07.29
jQuery 기초 (HTML, CSS, JS)  (0) 2024.07.18