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개의 댓글

관련 채용 정보