Context API + Hooks : 미니멀한 다크 모드 구축
19756 단어 webdevreactjavascriptcodenewbie
왜 이 후크 ?
반응 애플리케이션(복잡함), 데이터는 하향식 접근 방식(부모에서 자식으로 구성 요소)으로 전달되므로 소품을 수동으로 전달하는 것이 더 복잡해졌습니다. (예: UI 테마, 로컬 기본 설정)에 대한 소품이 "번거롭습니다". 그래서 Facebook 엔지니어들은 우리를 구하기 위해 약간의 노력을 기울였습니다. (다른 후크 개발).
useContext() 후크란 무엇입니까?
컨텍스트는 모든 수준에서 수동으로 소품을 전달하지 않고도 구성 요소 트리를 통해 데이터를 전달하는 방법을 제공합니다.
import React, { useContext } from 'react';
언제 사용합니까?
컨텍스트는 현재 인증된 사용자, 테마 또는 기본 언어와 같은 React 구성 요소 트리에 대해 "전역"으로 간주될 수 있는 데이터를 공유하도록 설계되었습니다.
사용 사례 중 하나: (UI 테마 만들기) 🌗
우리는 아래의 여러 단계에서 학습할 것입니다Context
.
컨텍스트는 모든 수준에서 수동으로 소품을 전달하지 않고도 구성 요소 트리를 통해 데이터를 전달하는 방법을 제공합니다.
import React, { useContext } from 'react';
언제 사용합니까?
컨텍스트는 현재 인증된 사용자, 테마 또는 기본 언어와 같은 React 구성 요소 트리에 대해 "전역"으로 간주될 수 있는 데이터를 공유하도록 설계되었습니다.
사용 사례 중 하나: (UI 테마 만들기) 🌗
우리는 아래의 여러 단계에서 학습할 것입니다Context
.
우리는 아래의 여러 단계에서 학습할 것입니다
Context
.Children.js
(하위 구성 요소에 소품 전달). App.js
설정(컨텍스트 생성). Colorify.js
(자식에서 UI 테마 조정). Children.js 설정 .
Colorify.js
파일을 만드십시오. 이 파일에는 나중에 어두운 모드와 밝은 모드 사이에서 전환하는 버튼과 일부 논리가 포함됩니다. Children.js
라는 새 구성 요소 파일을 만들고 하위 구성 요소Colorify.js
의 부모 역할을 합니다.see the below diagram to understand the flow of data.
children.js
구성 요소로 전달되고 REACT DOM 구성 요소, 즉 하위 구성 요소에 액세스된다는 것입니다. Note: more the children, all of them can have access to the props passed to
children.js
.
import React from "react";
import Colorify from "./Colorify";
export default function Children() {
return (
<div>
<Colorify /> // passing children Component
</div>
);
}
App.js 설정(컨텍스트 생성).
Children.js
. themes
개체.const themes = {
light: {
foreground: "#000",
background: "#fff"
},
dark: {
foreground: "#fff",
background: "#000"
}
};
export const ThemeContext = React.createContext(themes);
이 코드 줄은
ThemeContext
로 생성된 초기화된 컨텍스트를 내보내고 themes
props(value)를 인수로 전달한다는 것을 의미합니다.<ThemeContext.Provider>
가 있는 래퍼 구성 요소value prop
를 전달하여 테마 객체를 값 소품으로 전달합니다. children
구성 요소를 전달합니다. themes
를 기본값으로 prop에 전달하고 있으며 이는 React DOM Hierarchy의 하위 구성 요소에 전달됩니다.export default function App() {
return (
<ThemeContext.Provider value={themes}> // wrapper Component
<Children /> // children Component (Props will be passed and accessed to it.)
</ThemeContext.Provider>
);
}
// Complete app.js code
import "./styles.css";
import React from "react";
import Children from "./Children";
const themes = {
light: {
foreground: "#000",
background: "#fff"
},
dark: {
foreground: "#fff",
background: "#000"
}
};
export const ThemeContext = React.createContext(themes);
export default function App() {
return (
<ThemeContext.Provider value={themes}> // wrapper Component
<Children /> // children Component (Props will be passed and accessed to it.)
</ThemeContext.Provider>
);
}
Colorify.js 구성 요소 설정(최종 논리)
dark
에서 light
및 forth
로 변경하기 위한 최종 논리입니다. import React, { useContext, useState } from 'react';
Context
에서 생성된 app.js
를 가져오는 중import { ThemeContext } from "./App";
export default function Colorify() {
const theme = useContext(ThemeContext);
const [state, setState] = useState(theme.light);
const darkMode = () => {
setState(theme.dark);
};
const lightMode = () => {
setState(theme.light);
};
return (
<>
<div
style={{
backgroundColor: state.background,
color: state.foreground,
height: 100,
width: 200,
margin: 100,
border: `1px solid ${state.foreground}`
}}
></div>
<button onClick={darkMode}>Dark Mode!</button>
<button onClick={lightMode}>Light Mode!</button>
</>
);
}
const darkMode = () => {
setState(theme.dark);
};
const lightMode = () => {
setState(theme.light);
};
theme.dark
에서 theme.light
로 상태를 변경하고 있습니다.구성 요소의 배경색을 텍스트 색상은
state.foreground
로, 배경색은 state.background
로 설정합니다.Colorify.js
의 전체 코드는 다음과 같습니다.// Complete Code for Colorify.js
import React, { useContext, useState } from "react";
import { ThemeContext } from "./App";
export default function Colorify() {
const theme = useContext(ThemeContext);
const [state, setState] = useState(theme.light);
const darkMode = () => {
setState(theme.dark);
};
const lightMode = () => {
setState(theme.light);
};
return (
<>
<div
style={{
backgroundColor: state.background,
color: state.foreground,
height: 100,
width: 200,
margin: 100,
border: `1px solid ${state.foreground}`
}}
></div>
<button onClick={darkMode}>Dark Mode!</button>
<button onClick={lightMode}>Light Mode!</button>
</>
);
}
코드샌드박스에서 미리보기를 확인하고 함께 플레이하세요.
useContext
Hooks의 사용 사례를 즐기셨기를 바랍니다.댓글을 달아주세요!
행복한 코딩!
Reference
이 문제에 관하여(Context API + Hooks : 미니멀한 다크 모드 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thecsgrad/context-api-hooks-building-minimalist-dark-mode-33b6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)