[javascript] React Hook useState가 const를 사용하고 let을 사용하지 않는 이유
React useState Hook를 사용하는 표준 방법은 다음과 같습니다.
const [count, setCount] = useState(0);
그러나이 const count
변수는 분명히 다른 기본 값으로 재 할당 될 것입니다.
그렇다면 왜 변수가로 정의되지 let count
않습니까?
답변
다른 기본 값으로 명확하게 재 할당 될 것입니다
실제로는 아닙니다. 컴포넌트가 다시 렌더링되면 함수가 다시 실행되어 새 범위를 작성하고 새 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
참고 : 후크는 훨씬 정교하며 실제로 이와 같이 구현되지는 않습니다. 이것은 비슷한 동작을 보여주기위한 것입니다.
답변
const
동일한 범위 내에서 참조 값을 다시 할당하지 않도록 보호합니다.
에서 MDN
변수 식별자를 재 할당 할 수 없다는 것만으로 보유한 값이 변경 불가능하다는 의미는 아닙니다.
또한
상수는 같은 범위에있는 함수 또는 변수와 이름을 공유 할 수 없습니다.
답변
setCount를 호출 한 후 컴포넌트가 다시 렌더링되고 새로운 useState 호출이 새 값을 리턴합니다. 요점은 카운트가 변경 불가능하다는 것입니다. 오타가 없습니다.
기술적으로 이것은 모든 렌더에서 새로운 변수입니다.
출처 : React Github 문제 : Docs-Hooks : 그 구성 요소가 오타입니까?
답변
여기서 카운트가 변경되어야하기 때문에 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
};