React : Understanding State

<angeLog/>ยท2024๋…„ 2์›” 16์ผ

REACT

๋ชฉ๋ก ๋ณด๊ธฐ
2/25
post-thumbnail

๐Ÿ’ก๋…ธ๋งˆ๋“œ์ฝ”๋” ๋‹ˆ๊ผฌ์Œค์˜ ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค.

React์˜ state
state๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์„ ๋งํ•œ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” react์—์„œ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ด์•„์ค„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณต์Šตํ•œ๋‹ค. ์ด์ „ ํฌ์ŠคํŠธ์—์„œ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ–ˆ๋˜ ๊ธฐ๋Šฅ์ด๋‹ค.
jsx๋ฌธ๋ฒ•์œผ๋กœ component๋ฅผ ๋งŒ๋“ค๊ณ  ReactDOM์„ ์ด์šฉํ•ด html body์— ๋‘์—ˆ๋‹ค.

const root = document.getElementById("root");
    const Title = () => {
      // arrow function์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๊ณ , ํ•„์ˆ˜๊ฐ’์ธ return์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.
      return (
        //return ์•ˆ์— jsx์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
        <h3 id="title" onMouseEnter={() => console.log("i am mouse enter")}>
          Hello, i am title
        </h3>
      );
    };
    const Btn = () => {
      return (
        <button onClick={() => console.log("i am clicked")}>Click me</button>
      );
    };
    const Container = <div><Title/> <Btn/></div>;
	//Title, Btn์€ ์ปดํฌ๋„ŒํŠธํ™” ๋˜์–ด container์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘ฉ๐Ÿปโ€๐ŸŽ“component๋ฅผ ๋งŒ๋“ค๋•Œ ๋ณ€์ˆ˜์˜ ์ฒซ๋ฌธ์ž๋Š” ๋ฌด์กฐ๊ฑด ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

Clickํ•  ๋•Œ ๋งˆ๋‹ค Counter+1

    const root = document.getElementById("root");
    let counter = 0;
    function countUp() {
      counter = counter + 1;
    }
    const Container = () => (
      <div>
        <h3>Total clicks: {counter}</h3>
        <button>Click me</button>
      </div>
    );
    ReactDOM.render(<Container />, root);

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์ง€๋งŒ ์ฝ˜์†”์—์„œ๋Š” ํด๋ฆญํ•œ ๋งŒํผ counter๊ฐ€ +1๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์™œ ๋ธŒ๋ผ์šฐ์ €์—๋Š” update๊ฐ€ ๋˜์ง€ ์•Š์€๊ฑธ๊นŒ?
react๊ฐ€ ๋ Œ๋”๋  ๋•Œ, ReactDOM์ด ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  ์ดํ›„ ๋‹ค์‹œ ์žฌ์‹คํ–‰์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ function countUp์ด ์‹คํ–‰๋  ๋•Œ ๋‹ค์‹œ ํ•œ๋ฒˆ ReactDOM์„ ์‹คํ–‰ํ•ด์•ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ state๊ฐ€ update๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ UI update๋ผ๊ณ  ํ•œ๋‹ค.

state update ํ•˜๊ธฐ

    const root = document.getElementById("root");
    let counter = 0;
    function countUp() {
      counter = counter + 1;
      ReactDOM.render(<Container />, root);
    }
    const Container = () => (
      <div>
        <h3>Total clicks: {counter}</h3>
        <button onClick={countUp}>Click me</button>
      </div>
    );
    ReactDOM.render(<Container />, root);

ํ•จ์ˆ˜ counter๊ฐ€ ์‹คํ–‰๋  ๋•Œ ReactDOM์„ ์žฌ์‹คํ–‰ํ•˜๋‹ˆ ๋ธŒ๋ผ์šฐ์ €์— update๋œ state๊ฐ€ ๋ณด์—ฌ์ง„๋‹ค.

๋งŒ์•ฝ ๋ Œ๋”ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋งŽ์•„์ง„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
ReactDOM.render... ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.
์ด๋•Œ๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

    const root = document.getElementById("root");
    let counter = 0;
    function countUp() {
      counter = counter + 1;
      render();
    }
    function render() {
      ReactDOM.render(<Container/>, root);
    }
    const Container = () => {
      return (
        <div>
          <h3>Total clicks: {counter}</h3>
          <button onClick={countUp}>Click me</button>
        </div>
      );
    };
    render();


๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๊ฒŒ ์ถœ๋ ฅ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๋” ๋ฐœ์ „์‹œํ‚จ๋‹ค๊ณ  ํ•˜๋ฉด, javascript์˜ ์—ฐ์‚ฐ์ž์ธ ++๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ๋‹ค.

    const root = document.getElementById("root");
    let counter = 0;
    function countUp() {
      counter++;
      render();
    }
    function render() {
      ReactDOM.render(<Container />, root);
    }
    const Container = () => {
      return (
        <div>
          <h3>Total clicks: {counter}</h3>
          <button onClick={countUp}>Click me</button>
        </div>
      );
    };
    render();

โ˜๐Ÿป์ด๋ž˜์„œ react ์“ฐ๋Š”๊ตฌ๋‚˜โœจ
vanilla์—์„œ๋Š” ์ „์ฒด๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์ง€๋งŒ react์—์„œ๋Š” ๋ณ€๊ฒฝํ•œ state๋งŒ update๋œ๋‹ค.

์ดํ•ด ์™์™ ์„ค๋ช…์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ถ”๊ฐ€!

profile
์ผ๋‹จ ํ•ด๋ณผ๊ฒŒ์š”!โœ๐Ÿป

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