useState 초기값을 함수로 사용하는 경우
사용하는 경우는 무엇입니까?useState
함수로서의 초기값
단순히 값을 전달하는 것과 차이가 있습니까?
예.
const [state, setState] = useState(() => someValue)
초기 상태의 계산을 한 번만 수행할 때 사용합니다.그 대신 다음과 같은 표현을 사용할 수 있습니다.
const [state, setState] = useState(compute())
그compute
다른 렌더링에서도 실행되며 첫 번째 렌더링 후에는* 해당 값만 무시됩니다.
이 경우:
const [state, setState] = useState(() => compute())
지금이다,compute
는 한 번만 실행됩니다.
문서에서:
const [state, setState] = useState(initialState);
initialState 인수는 초기 렌더링 시 사용되는 상태입니다.후속 렌더링에서는 무시됩니다.초기 상태가 값비싼 계산의 결과인 경우 함수를 대신 제공할 수 있습니다. 이 함수는 초기 렌더링에서만 실행됩니다.
const [state, setState] = useState(() => { const initialState = someExpensiveComputation(props); return initialState; });
* strict 모드일 경우 렌더 메서드가 이중으로 호출되기 때문에 첫 번째 렌더 값도 무시될 수 있습니다.하지만 이것은 이 대답에 중요하지 않다.두 번째 렌더링 후에는 값이 무시되기 때문입니다.
useState의 초기값을 함수로 사용하려면 currying을 사용해야 합니다.
const [state, setState] = useState(() => () => someValue);
이는 매뉴얼에서 useState는 지정된 함수를 실행하고 그 결과를 초기값으로 간주하기 때문입니다.카레링을 이용해서() => someValue
반환되어 초기값으로 간주됩니다.
상태를 초기화하기 위한 부하가 높은 계산이 있을 때는 함수를 사용해야 합니다.그리고 이것은 국가의 초기화를 게으르게 하는 것이다.이것은 kentcdods에 의한 리액트 상태의 게으른 초기화에 관한 잘 쓰여진 블로그입니다.
함수의 랩핑이 계산적으로 덜 무거운 이유는 소품 변경 시 리액션이 성분 함수를 재실행하기 때문입니다.useState()의 내부에 다음과 같은 계산이 있는 경우useState(heavyComputation())
, JavaScript는 헤비 컴퓨팅()을 실행하지만,useState(()=>heavyComputation())
JavaScript는 헤비 컴퓨팅()을 실행하지 않지만 큐레이션된 함수로 전달되며 useState는 이 함수를 재실행하지 않습니다.
보통의
렌더링 1:useState(heavyComputation()) //JavaScript calls heavyComputation
렌더링 2:useState(heavyComputation()) //JavaScript calls heavyComputation
렌더링 3:useState(heavyComputation()) //JavaScript calls heavyComputation
...
기능성 포장(건조)
렌더링 1:useState(()=>heavyComputation()) //useState() calls heavyComputation
렌더링 2:useState(()=>heavyComputation()) //useState() uses the value from the previous render so heavyComputation() is not called
렌더링 3:useState(()=>heavyComputation()) //useState() uses the value from the previous render so heavyComputation() is not called
...
언급URL : https://stackoverflow.com/questions/60120261/when-to-use-usestate-initial-value-as-function
'sourcecode' 카테고리의 다른 글
React 구성 요소에서 사용자 지정 함수 생성 (0) | 2023.03.29 |
---|---|
C#을 사용하여 서버에 JSON을 게시하려면 어떻게 해야 합니까? (0) | 2023.03.29 |
IOS9 WK Web View접근 제어 허가 발신지 (0) | 2023.03.29 |
json 인코딩 문자열 내에서 서브 어레이 데이터 주위에 대괄호를 추가하는 방법은 무엇입니까? (0) | 2023.03.29 |
에서 C# 개체를 JSON 문자열로 변환하려면 어떻게 해야 합니까?인터넷? (0) | 2023.03.29 |