React에서 컨텍스트를 설정하는 방법
먼저
npx create-react-app
명령을 사용하여 새 React 앱을 만들고 코드 편집기에서 새 프로젝트를 엽니다. 그렇게 했다면 파일 구조는 다음과 같아야 합니다.컨텍스트 설정
1단계: "src/"디렉토리에 "context"폴더를 만듭니다.
2단계: 컨텍스트 폴더에 "type.js"파일을 만듭니다. 이 파일은 감속기 작업 유형을 보관합니다.
// src/context/types.js
export const ADD_CONTACT = "ADD_CONTACT"; // this will eventually be passed to the reducer
3단계: "컨텍스트"폴더에서 폴더를 만들고 관리할 상태를 따라 이름을 지정합니다. 이 예에서는 사용자의 연락처를 추적하는 앱을 만들고 있으므로 이 폴더의 이름을 "연락처"로 지정했습니다.
4단계: "contact"폴더에서 Context, Reducer 및 State에 대한 3개의 파일을 만듭니다. 이 예에서 내 파일은 contactContext, contactReducer 및 ContactState입니다.
5단계: contactContext 파일에서:
// src/context/contact/contactContext.js
import { createContext } from "react";
const contactContext = createContext(); // declare your context variable and set it to a new context using createContext()
export default contactContext;
여기서는 단순히 새 컨텍스트를 초기화하고 내보냅니다. 이것은 ContactState로 가져올 것입니다.
6단계: contactReducer 파일에서:
// src/context/contact/contactReducer.js
import {
ADD_CONTACT
} from "../types"; // import the action types you will be using in this reducer
// export your switch case statement to handle the actions dispatched to the reducer
export default (state, action) => {
switch (action.type) {
case ADD_CONTACT:
return {
...state,
contacts: [...state.contacts, action.payload],
};
default:
return state;
}
};
7단계: ContactState 파일에서:
// src/context/contact/ContactState.js
import React, { useReducer } from "react"; // import useReducer hook
import { v4 as uuid } from "uuid"; // using uuid to create random ID for a new contact
// import contactContext and contactReducer
import ContactContext from "./contactContext";
import ContactReducer from "./contactReducer";
// import types from types.js to be dispatched to ContactReducer vis the useReducer hook
import {
ADD_CONTACT
} from "../types";
const ContactState = (props) => {
const initialState = {
contacts: [
{
id: 1,
name: "John Doe",
email: "[email protected]",
phone: "111-111-1111",
}
};
// pass ContactReducer and initial state to useReducer hook in order to mutate app-level state
const [state, dispatch] = useReducer(ContactReducer, initialState);
// Add Contact
const addContact = (contact) => {
contact.id = uuid();
dispatch({ type: ADD_CONTACT, payload: contact });
};
return (
{/* Return the Context Provider with the value prop set as an object of the state and props we want all components to have access to */}
<ContactContext.Provider
value={{
contacts: state.contacts, {/* passing down contact state*/}
addContact {/* passing down a function*/}
}}
>
{props.children}
</ContactContext.Provider>
);
};
export default ContactState;
8단계: 마지막으로
ContactState
를 App.js
로 가져오고 공급자에서 전체 앱을 래핑합니다.// src/App.js
import React from 'react';
import Contacts from './components/Contacts';
import './App.css';
import ContactState from "./context/contact/ContactState";
const App = () => {
return (
{/* Wrap entire app in ContactState, which returns the Provider. This will allow all components in the app to have access to the state in ContactState */}
<ContactState>
<Contacts />
</ContactState>
);
}
export default App;
ContactState에서 전체 앱을 래핑하면 App의 모든 구성 요소가 ContactState의 자식이 되며 이제 useContext 후크를 통해 상태에 액세스할 수 있습니다.
//src/components/Contacts.js
import React, { useContext } from "react"; // importing useContext hook
import ContactContext from "../../context/contact/contactContext";
const Contacts = () => {
// declare a context variable with the useContext hook and now the Context component has access to the state from ContactContext
const contactContext = useContext(ContactContext);
// destructure out contacts from our contactContext
const { contacts } = contactContext;
return (
<div>
{contacts.map(contact => <h1>{contact.name}</h1>)}
</div>
);
};
export default Contacts;
Reference
이 문제에 관하여(React에서 컨텍스트를 설정하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jasonmeidev/how-i-set-up-context-in-react-4fp3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)