useState란 무엇이며, 왜 일반let을 사용하지 않습니까?

소개하다.


현재, 우리는useState 갈고리를 사용하여React 구성 요소에 변수를 설정하고 있습니다.useState는 "hooks"라고 불리는데, 이렇게 쓰여 있습니다.
const [count, setCount] = React.useState<number>(0);

But what really is this? Why do we have to use this hook just to set a variable that holds a number and get incremented?


우리는 왜 이런 물건을 쓰지 않습니까?
let count = 0;

count++;
첫 번째 카운터 응용 프로그램에서는 항상 바닐라 자바스크립트를 사용합니다.그럼 우리는 왜 그것을 쓰지 않습니까?

TLDR;


React는 구성 요소 함수를 호출하여 다시 렌더링하며, 함수를 호출할 때마다 변수가 재설정됩니다.

한 걸음 뒤로 물러서다


React 핵심 개념에 들어가기 전에 바닐라 자바스크립트로 돌아가자.이 프레젠테이션에 대해 우리는 간단한 계수기 프로그램을 구축할 것이다.
let count = 0;

function add() {
  count++;
  document.getElementById('count').textContent = count;
}
간단하죠?add() 감청기를 누르는 단추로 터치할 때, 우리는 계수를 추가하고 문서에 접근해서 텍스트를 업데이트합니다.
만약 우리가 자세히 관찰한다면, 우리는 그것이 세 가지 동작을 하고 있는 것을 볼 수 있을 것이다.우리들은 그것을 자신의 기능으로 분해할 것이다.
// Declare
let count = 0;

function mutate() {
  count++;
}

function render() {
  document.getElementById("count").textContent = count;
}

// event listener pseudocode
when button is clicked:
  mutate()
  render()
우리는 이런 결과를 얻었다.

비디오 Alt:
  • 왼쪽에 button 요소에 onclick 속성이 있음을 표시합니다. 이 속성은 mutate()render() 실행됩니다.
  • 사용자가 이 단추를 눌렀을 때마다 이 숫자는 1 증가
  • 3 행동


    우리가 계속하기 전에 우리는 다음과 같은 세 가지 동작이 있는데, 우리는 앞에서 분해할 것이다.

  • 신고하다→ let
  • 을 사용하여 변수 초기화

  • 변이하다→ 계수 변수 변경

  • 룬델→ 화면 변경 사항 업데이트
  • 우리가 이 단추를 자신의 기능으로 나누면 네가 그것을 똑똑히 볼 수 있을 것이다.
    <h1>Counter</h1>
    <p id="count">0</p>
    <button onclick="mutate()">Mutate</button>
    <button onclick="render()">Render</button>
    
    <script>
      let count = 0;
    
      function mutate() {
        count++;
        logTime();
        console.log('clicking, count: ', count);
      }
    
      function render() {
        document.getElementById('count').textContent = count;
      }
    </script>
    

    비디오 Alt:
  • [변이] 버튼을 클릭하면 콘솔 디스플레이 수가 증가합니다.그러나 화면의 숫자는 전혀 바뀌지 않았다.
  • 렌더 버튼을 클릭하면 화면의 숫자가 마지막 카운트 값으로 변경됩니다.
  • 리액션 보면서.


    JavaScript 코드를 단도직입적으로 번역하는 것이 바로 우리가 지금 가지고 있는 것입니다.
    function Component() {
      let count = 0;
    
      function mutate() {
        count = count + 1;
        console.log(count);
      }
    
      return (
        <div>
          <h1>{count}</h1>
          <button onClick={mutate}>Mutate</button>
        </div>
      );
    }
    
    이상한 거 봤어?
    찾았어요?
    예, 렌더링 기능이 없습니다.
    물론, 우리는 접근document을 통해 같은 렌더링 기능을 사용할 수 있지만, React에서 수동으로 접근하는 것은 좋은 방법이 아니다. 우리가 React를 사용하는 목적은 수동으로 관리하는 것이 아니다.

    렌더링 기능


    What is the equivalent of render function in React then?


    그것은 실제로function Component() 자체다.
    화면을 업데이트하려고 할 때마다 Component() 함수를 호출해서 화면을 업데이트합니다.
    이 함수를 호출하면 다시 count 선언하고 다시 mutate 함수를 선언하며 마지막으로 새로운 JSX를 반환합니다.
    다음은 프레젠테이션입니다.

    비디오 설명:
  • 13행과 15행
  • 에 두 개의 콘솔 로그가 있음
  • 페이지를 다시 로드하는 동안 콘솔 로그가 실행 중입니다.(초기 렌더링 시 일반 동작)
  • 다시 렌더링 버튼을 클릭할 때마다 로그가 호출됩니다.이것은 렌더링할 때마다 Component()가 호출된다는 것을 증명합니다.
  • 무엇이 렌더링 기능을 촉발시켰습니까?


    let on React 실행 코드를 사용하는 경우 변경 사항이 없습니다.렌더링 함수가 호출되지 않았기 때문입니다.
    React에서 렌더링 기능을 트리거합니다.
  • useState 값이 바뀌었을 때(setState 사용)
  • 모 어셈블리가 다시 렌더링된 경우
  • 전달 중인 아이템 변화 시
  • 두 번째와 세 번째는 기본적으로 set State에서 촉발하지만 부모 요소에서 촉발한다.
    이 때,useState 값이 바뀔 때마다 렌더링 함수를 호출합니다. 이 함수 자체가 구성 요소 함수입니다.

    아날로그 렌더링 기능

    count 변수를 상태로 바꾸기 전에 setToggle을 사용한 렌더링 함수 시뮬레이션을 만들고 싶습니다.현재 우리는 render를 사용하여 다시 렌더링을 터치할 수 있다.
    function Component() {
      //#region  //*=========== Render Fn Simulation ===========
      const [toggle, setToggle] = React.useState<boolean>(false);
      function render() {
        setToggle((t) => !t);
      }
      //#endregion  //*======== Render Fn Simulation ===========
    
      let count = 0;
    
      const mutate = () => {
        count = count + 1;
        console.log(`${getTime()}| count: ${count}`);
      };
    
      return (
        <div>
          <h1>{count}</h1>
          <Button onClick={mutate}>Mutate</Button>
          <Button onClick={render}>Render</Button>
        </div>
      );
    }
    
    그것의 실제 행동을 보여 주시오

    비디오 Alt:
  • Mutate 버튼을 클릭하면 카운트가 4
  • 로 증가합니다.
  • 렌더링 버튼이 클릭되었지만 화면의 숫자는 변하지 않았고 컨트롤러 로그는 4입니다.
  • 렌더링 기능을 다시 클릭하면 화면의 숫자가 0이고 콘솔 로그가 0
  • 으로 변경됩니다.
  • mutate를 누르면 증가하지만 4가 아니라 0부터 다시 증가합니다.
  • 🤯 왜 소용이 없어요?


    이것은 사실상 우리가 카운트 변수를 다시 성명하고 있기 때문이다.
    function Component() {
      //#region  //*=========== Render Fn Simulation ===========
      const [toggle, setToggle] = React.useState<boolean>(false);
      function render() {
        setToggle((t) => !t);
        console.log(`${getTime()} | Render function called at count: ${count}`);
      }
      //#endregion  //*======== Render Fn Simulation ===========
    
      let count = 0;
    
      const mutate = () => {
        count = count + 1;
        console.log(`${getTime()}| count: ${count}`);
      };
    
      return (
        <div>
          <h1>{count}</h1>
          <Button onClick={mutate}>Mutate</Button>
          <Button onClick={render}>Render</Button>
        </div>
      );
    }
    
    react에서 구성 요소 함수를 호출할 때마다, 우리는 계수를 0으로 다시 성명합니다.render 함수는 여전히 유효하고, react는 화면을 업데이트했지만, 다시 설명하는 계수로 업데이트되었습니다. 이 계수는 여전히 0입니다.

    Now that is why we can't use a normal variable in a React component.


    어셈블리 외부에서 선언


    너도 물어볼 수 있다.

    Why don't we move the declaration outside the Component function?


    이것은 일리가 있다. 이동 성명을 통해 우리는 count가 0으로 재성명되는 것을 피했다.한번 해보자.
    let count = 0;
    
    function Component() {
      //#region  //*=========== Render Fn Simulation ===========
      const [toggle, setToggle] = React.useState<boolean>(false);
      function render() {
        setToggle((t) => !t);
        console.log(`${getTime()} | Render function called at count: ${count}`);
      }
      //#endregion  //*======== Render Fn Simulation ===========
    
      const mutate = () => {
        count = count + 1;
        console.log(`${getTime()}| count: ${count}`);
      };
    
      return (
        <div>
          <h1>{count}</h1>
          <Button onClick={mutate}>Mutate</Button>
          <Button onClick={render}>Render</Button>
        </div>
      );
    }
    

    비디오 Alt:
  • Mutate 버튼이 3회 클릭되고 count가 3
  • 로 증가
  • 렌더 버튼을 클릭하면 화면의 숫자가 3으로 업데이트됩니다.
  • [변이] 버튼을 다시 클릭하면 3에서 5로 증가
  • 렌더 버튼을 다시 클릭하면 올바른 수로 업데이트됩니다.
  • 정말 쓸모가 있다!아니면 이렇게?
    그것은 확실히 작용했다. 이것은 요행이 아니다.보셔야 할 게 있습니다.

    비디오 Alt:
  • 현재 카운트 = 5입니다. 렌더 버튼을 클릭하면 5임을 확인할 수 있습니다.
  • 그런 다음 다른 페이지
  • 로 이동합니다.
  • 카운터 페이지로 돌아가지만 카운터는 5입니다.
  • 변이 버튼을 클릭하면 5에서 증가
  • 예, 변수는 지워지지 않습니다.
    이것은 좋은 행동이 아니다. 왜냐하면 우리는 수동으로 그것을 정리해야 하기 때문이다. 그렇지 않으면 우리의 응용 프로그램을 어지럽힐 수 있기 때문이다.

    Now that is why we can't use a normal variable outside a React component.


    useState 사용


    이것은 우리가useState를 사용할 때의 코드입니다
    function Component() {
      const [count, setCount] = React.useState<number>(0);
    
      const mutateAndRender = () => {
        setCount((count) => count + 1);
        console.log(`${getTime()} | count: ${count}`);
      };
    
      return (
        <div>
          <h1>{count}</h1>
          <div className='mt-4 space-x-2'>
            <Button onClick={mutateAndRender} variant='light'>
              Add
            </Button>
          </div>
        </div>
      );
    }
    
    프레젠테이션입니다.

    비디오 Alt:
    콘솔을 알 수 있습니다.로그 수가 1 지연되어 잠시 무시되었습니다.
  • 추가 단추를 누르고 계수를 추가하며 화면에 업데이트
  • 다른 페이지로 이동하고 돌아올 때 계수는 0으로 리셋됩니다.
  • 요컨대useState는 네 가지 일을 했다.

  • 선언, 다음 구문을 사용하여 선언
  •    const [count, setCount] = React.useState<number>(0);
    
  • setCount를 사용하여 변종 및 렌더링, 값 변경 및 자동 렌더링 변경

  • 다시 렌더링할 때마다 데이터 유지→ render 함수를 호출할 때useState는 계수 값을 다시 설명하지 않습니다.

  • 다른 페이지로 이동할 때, 또는 보통 호출합니다. 구성 요소가 마운트 해제될 때, 이 값을 초기화합니다.
  • 왜 백작이 늦었어


    const mutateAndRender = () => {
      setCount((count) => count + 1);
      console.log(`${getTime()} | count: ${count}`);
    };
    
    이것은 setCount 함수가 비동기적이기 때문이다.
    함수를 호출한 후 계수 값을 업데이트하는 데 시간이 필요합니다.그래서 우리가 컨트롤러를 호출할 때지금 로그인하면 이전 값을 되돌려줍니다.
    너는 컨트롤러를 이동할 수 있다.다시 렌더링할 때 실행할 함수 외부에 로그인하기 (Component()
    function Component() {
        ...
    
        const mutateAndRender = () => {
          setCount((count) => count + 1);
        };
    
        console.log(`${getTime()} | count: ${count}`);
    
      return ...
    }
    

    3. 행동도



    이것은 업데이트된 도표입니다. 이제useState와setState의 역할을 알 수 있습니다.

    요점을 요약하고 다시 말하다.


    잘했어, 첫 번째 React 핵심 개념 시리즈를 완성했어.나는 분명히 이 시리즈를 계속할 것이다. 왜냐하면 아직도 많은 갈고리가 덮여 있기 때문이다.내가 이 블로그에서 제기한 심지 모형을 견지해 주십시오. 왜냐하면 나는 곧 다음 블로그에서 다시 그것을 인용할 것입니다.
    이 문장을 통해 우리는 알게 되었다
  • React는 구성 요소 함수 자체를 호출하여 다시 렌더링하기 때문에 일반let을 사용할 수 없습니다.
  • 구성 요소 함수에 있는 모든 코드를 다시 보여 줍니다. 변수와 함수 설명, 컨트롤러 로그와 함수 호출을 포함합니다.
  • useState 갈고리를 사용하면 변수와 화면의 숫자를 업데이트하고 다시 렌더링하는 동안 데이터를 보존할 수 있습니다.
  • 다음 박문견.놓치고 싶지 않으면 나의 시사 통신을 구독해 주세요.

    테스트


    실제로 내 사이트에 갑작스러운 테스트가 하나 있는데, 나는 네가 그것에 참가해서 너의 지식을 테스트할 것을 건의한다.
    이것은link to the quiz

    Originally posted on my personal site, find more blog posts and code snippets library I put up for easy access on my site 🚀

    좋은 웹페이지 즐겨찾기