React Hook useState가 const를 사용하고 let을 사용하지 않는 이유


33

React useState Hook를 사용하는 표준 방법은 다음과 같습니다.

const [count, setCount] = useState(0);

그러나이 const count변수는 분명히 다른 기본 값으로 재 할당 될 것입니다.

그렇다면 왜 변수가로 정의되지 let count않습니까?


5
상태를 변경하면 구성 요소가 명확하게 다시 렌더링됩니까? 따라서 다시 렌더링하면 카운트가 "재 할당"되지 않습니다
Kevin.a

3
실제로, 함수 범위의 범위에서 변경 불가능한 상태로 유지됩니다. 고마워 Kevin!
Nacho

답변:


46

다른 기본 값으로 명확하게 재 할당 될 것입니다

실제로는 아닙니다. 컴포넌트가 다시 렌더링되면 함수가 다시 실행되어 새 범위를 작성하고 새 count변수를 작성하며 이전 변수와 관련이 없습니다.

예:

let _state;
let _initialized = false;
function useState(initialValue) {
  if (!_initialized) {
    _state = initialValue;
    _initialized = true;
  }
  return [_state, v => _state = v];
}

function Component() {
  const [count, setCount] = useState(0);

  console.log(count);
  setCount(count + 1);
}

Component();
Component(); // in reality `setCount` somehow triggers a rerender, calling Component again
Component(); // another rerender

참고 : 후크는 훨씬 정교하며 실제로 이와 같이 구현되지는 않습니다. 이것은 비슷한 동작을 보여주기위한 것입니다.


2

const 동일한 범위 내에서 참조 값을 다시 할당하지 않도록 보호합니다.

에서 MDN

변수 식별자를 재 할당 할 수 없다는 것만으로 보유한 값이 변경 불가능하다는 의미는 아닙니다.

또한

상수는 같은 범위에있는 함수 또는 변수와 이름을 공유 할 수 없습니다.


1
기본 값은 변경할 수 없으므로 const 숫자가 어떻게 변할 수 있는지 설명하는 것이 더 중요합니다.
프레드 스타크


0

여기서 카운트가 변경되어야하기 때문에 const가 좌절한다는 것을 알았습니다.

  let [count, setCount] = useState(0)
  // simply can't use ++ on either side of count increment given we declare as const [count, setCount] 
  // instead declaration of var or let [count, setCount] allows simpler code
  const increment = () => {
    setCount(count++); //const cannot do this only let or var
  };
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.