반응형
useState가 계속 초기값으로 재설정됨재렌더 시
그래서 화면 코드는 이렇게 생겼어.나는 UseState를 가지고 있다.amount
리렌더에서 초기값으로 계속 재설정되는 경우.useEffects가 3개 정도 있어.그 중 하나는 여기 샘플 코드에 있는데, 나는 db에서 금액을 받고 setAmount를 사용하여 설정한다.
const ConfirmPaymentDialog = props => {
const getInitialVal = () => {
console.log('Initial Amount: 0');
return conversions.numberToBigNumber(0);
};
const [amount, setAmount] = useState<BigNumber>(getInitialVal());
useEffect(() => {
getAmountToPay();
},[]);
const getAmountToPay = async () => {
const amount = await myDbModule.getAmount(customer.id);
console.log('DB Amount: ' + amount?.toString());
setAmount(amount || conversions.numberToBigNumber(0));
};
useEffect(() => {
...
}, [isInputTextFocused])
console.log('Rendering');
return (<View>...</View>);
}
이 화면을 열면.다음 콘솔 로그가 있는 경우
LOG Initial Amount: 0
LOG Rendering
LOG DB Amount: 500
LOG Initial Amount: 0
LOG Rendering
LOG Initial Amount: 0
LOG Rendering
LOG Initial Amount: 0
LOG Rendering
LOG Initial Amount: 0
LOG Rendering
LOG Initial Amount: 0
LOG Rendering
재렌더 시 사용 상태를 기본값으로 재설정하지 못하게 하는 방법
실제로 초기값으로 리셋된 것은 아니다.초기값을 생성하는 함수를 계속 호출하면 된다.콜백(callback)이라고 부르지 않고 (태만적인 초기 상태 참조)으로 넘겨준다.useState()
훅을 채우면, 한 번 부르게 될 것이다.
const [amount, setAmount] = useState<BigNumber>(getInitialVal); // getInitialVal instead of getInitialVal()
반응형
'programing' 카테고리의 다른 글
Radium 플러그인 사용 시 정의되지 않은 오류의 reactJs styleKeeperContext'를 가져오는 중 (0) | 2022.03.28 |
---|---|
1이 뭔데?__truediv__`?><<<<<python>>>><<<<python>>><<<python>> (0) | 2022.03.28 |
VueJS 2에서 v-for 값 + 문자열을 사용하는 동적 v-모델 (0) | 2022.03.28 |
Resact Native가 Windows(윈도우)에서 개발을 지원하지 않는가? (0) | 2022.03.28 |
vue-roouter를 사용하여 리디렉션하려면 어떻게 해야 하는가? (0) | 2022.03.27 |