-
[React] ๋ฐ์ดํฐ ํ๋ฆcodeStates front-end/React 2023. 2. 2. 16:23๋ฐ์ํ
๐๋ฆฌ์กํธ ๋ฐ์ดํฐ ํ๋ฆ
๐๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ( one-way data flow )
React๋ ํ์ด์ง ๋จ์๊ฐ x -> ์ปดํฌ๋ํธ ๋จ์
์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ -> ํ์ด์ง๋ฅผ ์กฐ๋ฆฝ (์ํฅ์(bottom-up)์ผ๋ก ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ์ง ๋ค)
์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์์ props๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ง์น ์ ๋ฌ์ธ์ ํน์ ์์ฑ์ฒ๋ผ ์ ๋ฌ ๋ฐ์
๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฃผ์ฒด : ๋ถ๋ชจ ์ปดํฌ๋ํธ -? ๋ฐ์ดํฐ ํ๋ฆ์ด ํํฅ์(top-down)
์ด๋ฅผ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๊ณ ํ๋ค
๐ก props์ state์ ์ค๋ช ์ดํดํ๊ธฐ
[React] State & Props & ๋ ๋๋ง ์ ์
๐๋ฆฌ์กํธ ๊ฐ๋ ๐State & Props State : ์ด๋ฉด์ ๋ณํ ์ ์๋ ๊ฐ(์ํ) ์ปดํฌ๋ํธ์ ์ฌ์ฉ ์ค ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ Props : ์ฑ๋ณ์ด๋ ์ด๋ฆ์ฒ๋ผ ๋ณํ์ง ์๋ ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ ex) ์ด๋ค
hwantech.tistory.com
๐state ๋์ด์ฌ๋ฆฌ๊ธฐ
๋ฆฌ์กํธ์ ํฐ ํน์ง : ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
ํ์ ์ปดํฌ๋ํธ์์์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ, ๋ถ๋ชจ์ ์ํ๋ฅผ ๋ฐ๊พธ์ด์ผ๋ง ํ๋ ์ํฉ์ "State ๋์ด์ฌ๋ฆฌ๊ธฐ(Lifting state up)"
์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํด์ ํด๊ฒฐ(์ฝ๋ฐฑํจ์ ๋ฐฉ๋ฒ๊ณผ ๋น์ท)
๐ก ์ฝ๋ฐฑํจ์
[JS] chapter13. ๊ณ ์ฐจํจ์
๐๊ณ ์ฐจํจ์ ์ผ๊ธ๊ฐ์ฒด์๋ ํจ์๊ฐ ์๋ค -ํจ์ ๋ณ์์ ํ ๋นํ ์ ์๋ค ๋ค๋ฅธ ํจ์์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌ๋ ์ ์๋ค ๋ค๋ฅธ ํจ์์ ๊ฒฐ๊ณผ๋ก์ ๋ฆฌํด๋ ์ ์๋ค -๊ณ ์ฐจํจ์ ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ์ ์ ์๊ณ ,
hwantech.tistory.com
๐งทcallback ๋ค์๋ณด๊ธฐ
// ๊ณ ์ฐจํจ์ function each(array, iterator) { for(let i = 0; i < array.length; i++) { let element = array[i] iterator(element, i, array) } } // ์ฝ๋ฐฑ ํจ์ function printElement(element) { console.log(element) } each(['hello', 'world'], printElement);
๐งทstate ๋์ด์ฌ๋ฆฌ๊ธฐ ์์
app.js
๋ถ๋ชจ์ ์์ ์ปดํฌ๋ํธ๊ฐ ํ๋์ฉ ์กด์ฌํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ
๋ฒํผ์ ๋๋ฌ์ ๋ถ๋ชจ์ ์ํ๋ฅผ ๋ฐ๊ฟ์ ์์๊น?
import React, { useState } from "react"; export default function ParentComponent() { const [value, setValue] = useState("๋ ๋ฐ๊ฟ์ค!"); const handleChangeValue = () => { setValue("๋ณด์ฌ์ค๊ฒ ์์ ํ ๋ฌ๋ผ์ง ๊ฐ"); }; return ( <div> <div>๊ฐ์ {value} ์ ๋๋ค</div> <ChildComponent /> </div> ); } function ChildComponent() { const handleClick = () => { // ์ด ๋ฒํผ์ ๋๋ฌ์ ๋ถ๋ชจ์ ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์์๊น? }; return <button onClick={handleClick}>๊ฐ ๋ณ๊ฒฝ</button>; }
state ๋์ด์ฌ๋ฆฐ ๊ฒฐ๊ณผ
import React, { useState } from "react"; export default function ParentComponent() { const [value, setValue] = useState("๋ ๋ฐ๊ฟ์ค!"); const handleChangeValue = () => { setValue("๋ณด์ฌ์ค๊ฒ ์์ ํ ๋ฌ๋ผ์ง ๊ฐ"); }; return ( <div> <div>๊ฐ์ {value} ์ ๋๋ค</div> <ChildComponent handleButtonClick={handleChangeValue} /> // 1๋ฒ // ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ํจ์ ์์ฒด๋ฅผ ํ์์ปดํฌ๋ํธ๋ก ์ ๋ฌํด์ผ ํ๋ค๊ณ ํ์ผ๋ฏ๋ก // ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ํจ์๋ handleChangeValue ์ด๊ณ // ์ ๋ฌ์ props๋ฅผ ์ด์ฉํ๋ค // ํ์ ์ปดํฌ๋ํธ๊ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ์ ๋ฐ๋ผ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ // ์ด๋ฆ์ handleButtonClick์ด๋ผ๊ณ ์ง์ด์คฌ๋ค </div> ); } function ChildComponent({ handleButtonClick }) { // 2๋ฒ props๋ก ํจ์๋ฅผ ์ ๋ฌ ๋ฐ์์จ๋ค const handleClick = () => { // ์ด ๋ฒํผ์ ๋๋ฌ์ ๋ถ๋ชจ์ ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์์๊น? handleButtonClick(); // 3๋ฒ // ChildComponent๋ ๋ง์น ๊ณ ์ฐจํจ์๊ฐ ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ์คํํ๋ฏ, // props๋ก ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ์ปดํฌ๋ํธ ๋ด์์ ์คํํ ์ ์๊ฒ ๋๋ค // "์ํ ๋ณ๊ฒฝ ํจ์"๋ ๋ฒํผ์ด ํด๋ฆญํ ๋ ์คํ๋๊ธฐ๋ฅผ ์ํ๋ฏ๋ก, ํด๋น ๋ถ๋ถ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ฉด ์๋ํ๋ค }; return <button onClick={handleClick}>๊ฐ ๋ณ๊ฒฝ</button>; }
์คํ๊ฒฐ๊ณผ
์คํ ์
์คํ ํ
๋ฐ์ํ'codeStates front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์ค์ต - StatesAirline Client (0) 2023.02.04 [React] Effect Hook (0) 2023.02.02 [React] ์ค์ต - React Twittler State & Props (0) 2023.01.30 [React] ์ด๋ฒคํธ ์ฒ๋ฆฌ & Controlled Component & React ๋ฐ์ดํฐ ํ๋ฆ (0) 2023.01.26 [React] State & Props & ๋ ๋๋ง ์ ์ (0) 2023.01.25