04 React State

김명래·2022년 11월 8일
0

react

목록 보기
1/3

State는 Prop 와 같이 Component에 요소들을 동적으로 생성하고 반환하는데 일조한다
차이점은 Prop 는 Component : 외부사용자를위한 데이터 State 는 Component : 내부사용자를 위한 데이터이다.

다음 예제를 보자.

function App() {
  const mode = "WELCOME";
  
  const topics = [
    {id : 1, title : "html", body : "html is ..."},
    {id : 2, title : "css", body : "css is ..."},
    {id : 3, title : "javascript", body : "javascript is ..."}
  ];

  let content = null;
  if(mode === "WELCOME"){
    content = <Content title="Welcome" body ="Hello, WEB"></Content>;
  }else if(mode === "READ"){
    content = <Content title="Read" body ="Hello, Read"></Content>;
  }
  return (
    <div className = "App">
      <Header title="React" onChangeMode={()=>{
        mode = "WELCOME";
      }}></Header>
      <NAV topics = {topics} onChangeMode={(id)=>{
        mode ="READ";        
      }}></NAV>
      {content}
    </div>
  )
  
}

해당 예제에서 중요하게 볼 부분은 NAV Component 밑에 content 이다.
content 는 mode의 값에 따라 가지고있는 Component속성값이 다르다.
그리고 Header나 NAV 태그를 클릭시에 mode값을 바꿔 바뀐 요소를 페이지에 띄워주기위한 일말의 과정인데 이렇게하면 요소들이 바뀌지않는것을 확인할 수 있다.
왜냐하면 해당페이지를 리로딩하지 않았기때문이다. 이때, State를 사용하여 해결할 수 있다.
사용하기위해서는 해당 훅을 먼저 참조해야한다.

import {useState} from 'react';

이후 App function 안에 있는 mode 를 "상태"로 바꾸어준다.

const mode = useState("WELCOME");

이렇게하면 useState가 상태를 반환할것이고 그것을 mode에 저장한게 된다.

mode를 console로 찍어보면


0번째 데이터는 상태의 값이고
1번째 데이터는 그 상태의 값을 변경할때 사용하는 함수이다.

const _mode = useState("WELCOME");
const mode = _mode[0];
const setMode = _mode[1];

해당 코드를 한줄로 줄이면

 const [mode, setMode] = useState("WELCOME");

라고 쓸 수 있다.

이를 활용하여 코드를 수정하면

function App() {
  
  
  
  
  const [mode, setMode] = useState("WELCOME");
  
  const topics = [
    {id : 1, title : "html", body : "html is ..."},
    {id : 2, title : "css", body : "css is ..."},
    {id : 3, title : "javascript", body : "javascript is ..."}
  ];

  let content = null;
  if(mode === "WELCOME"){
    content = <Content title="Welcome" body ="Hello, WEB"></Content>;
  }else if(mode === "READ"){
    content = <Content title="Read" body ="Hello, Read"></Content>;
  }
  return (
    <div className = "App">
      <Header title="React" onChangeMode={()=>{
        setMode("WELCOME");
      }}></Header>
      <NAV topics = {topics} onChangeMode={(id)=>{
        setMode("READ");
      }}></NAV>
      {content}
    </div>
  )
  
}

이렇게 볼 수 있고 setMode 호출시 WebComponent를 다시 불러와 새로운 화면을 보여주게 된다.

이 페이지에서 li로 만든 list를 클릭할때 그 list에 맞게 Content 영역을 동적으로 바꾸고싶다면 어떻게 해야할까?

App 함수에 있는 topics 가 가지고있는것이 해당 li에 대한 값들이다.
해당값들을 순회하면서 클릭한 li와 같다면 content의 값들을 수정하면된다.

그리고 li를 클릭할때 onchangeMode함수에 매개변수를 클릭한 id의 번호를 주기로 약속되어있다.

profile
독자보다 필자를 위해 포스팅합니다

0개의 댓글