[react] state

Hยท2022๋…„ 6์›” 15์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
3/7
post-thumbnail

๐Ÿ“Œstate

๐Ÿ“Œ props, state ์ฐจ์ด์ 

"prop๊ณผ state ๋ชจ๋‘ ์ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กœ์šด ๋ฆฌํ„ด๊ฐ’์„ ๋ฐ”๊พธ์–ด์„œ UI๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ prop์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€์ž๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๊ณ , state๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋‚ด๋ถ€์ž๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."


๐Ÿ“Œ useState()

> "๋ฐฐ์—ด์„ returnํ•˜๊ณ , ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” ์ƒํƒœ์˜ ๊ฐ’์„ ์ฝ์„ ๋•Œ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ,
1๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ์ƒํƒœ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋–„ ์“ฐ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค."

 /*const _mode = useState("welcome");
  const mode = _mode[0];
  const setMode = _mode[1];*/
// ์œ„ ์„ธ์ค„์˜ ์ถ•์•ฝํ˜• 
 const [mode, setMode] = useState("welcome");

๐Ÿ“ ์ดˆ๊ธฐ ์…‹ํŒ… > import { useState } from "react"; ์‚ฌ์šฉํ•  ํŒŒ์ผ ์ƒ๋‹จ์— import
๐Ÿ“ const [dataName, ํ•ด๋‹นData์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜] = useState("dataName์˜ ์ดˆ๊ธฐ๊ฐ’");
๐Ÿ“ ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•  ๋•Œ๋Š” useState() ์˜ ๋‘๋ฒˆ์งธ ๊ฐ’(ํ•จ์ˆ˜)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

00 ๋‚ด๊ฐ€ ํด๋ฆญํ•  ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜์„œ ๋ญ”๊ฐ€๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ํ•ด์ฃผ์„ธ์š”?

nav๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ

function Nav(props) {
  const array = [];
  for (let i = 0; i < props.list.length; i++) {
    let li = props.list[i];
    array.push(
      <li key={li.id}>
        <a
          id={li.id}
          href={"/read/" + li.id}
          onClick={(e) => {
            e.preventDefault();
            props.onChangeMode(Number(e.target.id)); 
            // ํ•ด๋‹น id ๊ฐ’์€ str์œผ๋กœ ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‹จ setMode์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Number๋กœ ๋ฐ”๊ฟ”์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.
          }}
        >
          {li.title}
        </a>
        <p>{li.body}</p>
      </li>
    );
  }

// app
function App() {
  const list = [
    { id: 1, title: "one", body: "์ฒซ๋ฒˆ์งธ ๋ฉ”๋‰ด๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋ฉด ํŽ˜์ด์ง€" },
    { id: 2, title: "two", body: "๋‘๋ฒˆ์งธ ๋ฉ”๋‰ด๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€" },
    { id: 3, title: "three", body: "์„ธ๋ฒˆ์งธ ๋ฉ”๋‰ด๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€" },
  ];
  const [mode, setMode] = useState("welcome");
  const [id, setId] = useState(null);
  let content = null; // ๊ธฐ์กด content ๊ฐ’ ์ดˆ๊ธฐํ™”
  if (mode === "welcome") {
    content = (
      <Article article="Welcome" body="header ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€์•ผ"></Article>
    );
  } else if (mode === "read") {
    let title,
      body = null; // ํ•ด๋‹น title,  body ์ดˆ๊ธฐํ™”
    for (let i = 0; i < list.length; i++) {
      if (list[i].id === id) {
        title = list[i].title; 
        body = list[i].body;
      }
    }
    content = <Article article={title} body={body}></Article>;
  }
  return (
    <div className="App">
      <Header
        title="title ๋ณ€๊ฒฝํ•ด๋ณผ๊ฒŒ" 
        onChangeMode={() => {
          setMode("welcome"); // setMode๊ฐ€ ๋ˆŒ๋ฆฌ๋ฉด ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ 
        }}
      ></Header>
      <Nav
        list={list}
        onChangeMode={(id) => {
          setMode("read");
          setId(id); //id ๊ฐ’์— ๋งž์ถฐ ๋ณ€๊ฒฝ๋จ ์œ„ if๋ฌธ ํ™•์ธ
        }}
      ></Nav>
      {content} // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ body์˜ ๋‚ด์šฉ์ด ๋‹ด๊ธฐ๋Š” ๋ถ€๋ถ„
    </div>
  );
}
profile
๐Ÿค˜ ๋Œ๋จธ๋ฆฌ๋„ ROCK์ด๋‹ค! ๐Ÿค˜

0๊ฐœ์˜ ๋Œ“๊ธ€