๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[JS Tam9์ƒํ™œ] #2 FE ์ƒํƒœ๊ด€๋ฆฌ

by Tamii 2021. 7. 16.
๋ฐ˜์‘ํ˜•

ํ”„๋ก ํŠธ์—”๋“œ์˜ ์ƒํƒœ๊ด€๋ฆฌ 

ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋Š๋ผ๋Š” ๋งˆ์ฃผํ•˜๋Š” ์–ด๋ ค์›€ ์ค‘ ํ•˜๋‚˜๋Š” ์ƒํƒœ state๊ด€๋ฆฌ

FE์˜ ์ƒํƒœ๋Š” ์›น ์ƒ์˜ ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๋งํ•˜๋ฉฐ 

์ด ๊ฐ’๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์„ ํƒ๊ณผ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•œ๋‹ค.

 

 

์ด ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ์–ดํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์ด ๊ฒฐ์ •๋˜๋Š”๋ฐ,

ํ”„๋ก ํŠธ์—”๋“œ์˜ ์ƒํƒœ๊ด€๋ฆฌ๋Š” ํ•œ ๊ณณ์—์„œ ํ•˜๋ฉด ๊ฐ€์žฅ ์ข‹๋‹ค.

๋ณดํ†ต์€ ์ตœ์ƒ์œ„ component ๋‚˜  storage์— ๋ณด๊ด€ํ•œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์„ค๊ณ„๋Š” ?

๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์ด component๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ถ€๋ชจ๊ฐ€ state๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ž์‹ component๋Š” rendering๋งŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๋ถ€๋ชจ component : ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•Š์Œ

์ž์‹ component : ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ

 

 

ex ) TodoList 

์˜ˆ์‹œ๋กœ TodoList๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด

TodoApp์ด๋ผ๋Š” ์ƒ์œ„ component์—์„œ๋งŒ state๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ 

๋‚˜๋จธ์ง€ TodoList, TodoInput, TodoFilter๋Š” ์ด ์ƒํƒœ๋ฅผ ๋ฐ›์•„ renderํ•˜๊ฒŒ๋”๋งŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•œ๋‹ค.

 

 

์ƒ์œ„ component (TodoApp)

export default function TodoApp($app) {
  // localStorage.clear();
  
  //์ƒํƒœ
  const this.state= { // }
  
  //๋ถ€๋ชจ์™€ ์ž์‹ component ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋ฐ ์ „๋‹ฌ
  this.setState = (nextState) => {
    this.state = nextState;
    todoList.setState(nextState);
    todoInput.setState(nextState);
    todoFilter.setState(nextState);
  };
  
  //์ƒํƒœ ์ „๋‹ฌ ๋ฐ›์•„ ์‚ฌ์šฉ
  const todoInput = new TodoInput({
    $app,
    initialState: this.state,
  });

  const todoList = new TodoList({
    $app,
    initialState: this.state,
  });

ํ•˜์œ„ component (TodoList)

export default function TodoList({
  $app,
  initialState,
}) {
  this.state = initialState

  this.setState = (nextState) => {
    this.state = nextState;
    this.render();
  };

 

์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด TodoApp์—์„œ๋งŒ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์‹คํ–‰ํ•˜๊ณ  

TodoList๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด setState๋ฅผ ํ†ตํ•ด ๊ฐ์ง€ํ•˜์—ฌ ์žฌ ๋ Œ๋”๋ง ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ƒํƒœ์— ๋”ฐ๋ผ ์žฌ ๋ Œ๋”๋ง ๋˜๋Š” ์›๋ฆฌ๋Š” React์—์„œ๋„ ์ž˜ ์‚ฌ์šฉ๋˜๋Š”๋ฐ 

React์—์„œ๋„ ์ƒํƒœ๊ด€๋ฆฌ์˜ ๊นŒ๋‹ค๋กœ์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Recoil, Redux, Context API ๋“ฑ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

 

React ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๊ฒช์—ˆ๋˜ React์˜ ์ƒํƒœ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๊ธ€๋„ ๊ณต๋ถ€ํ•˜์—ฌ ์ •๋ฆฌํ•ด๋†“์•˜๋‹ค.

https://rrecoder.tistory.com/127?category=955706 

 

[React] ReactHooks & Context API ๋ฅผ ์ด์šฉํ•œ state ๊ด€๋ฆฌ ( VS Redux)

๐Ÿ“Œ React์˜ ์ƒํƒœ๊ด€๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ์—ˆ๋‚˜? React ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ component๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ props drilling ์ด๋‹ค . top๋ ˆ๋ฒจ์˜ components์—์„œ bottom๋ ˆ๋ฒจ์˜ components ์—๊ฒŸ ์†์„ฑ์„ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.  <..

rrecoder.tistory.com

 

๋Œ“๊ธ€