반응형
에러: Promise로 받은 state의 변화를 감지하려고 하여 useEffect사용했으나, Promise결과가 반환되기 전에 useEffect가 한번만 call되고 결과값이 나온후에 다시 call되지 않음
const getDivisionList = async () => {
try {return await request(getDivisions);}
catch (error) {console.error(error);}
};
useEffect(() => {
const init = async () => {
const [divisions] = await Promise.all([getDivisionList()]);
setDivisionOptionsValue(divisions.map(n=>({value:n.companyCode, label:n.companyCode, group:"sortType"})));
};
init();
}, []);
useEffect(() => {setDivisionOptions(setDivisionOptionsValue)}, [divisionOptionsValue]);
........
divisionOptions[0].... -> 에러남
에러: promise결과값을 useMemo로 저장시 끝까지 promise상태고 남아 있어 에러남
const divisionOptionsValue = React.useMemo(()=>{
const init = async () => {
const [divisions] = await Promise.all([getDivisionList()]);
setDivisionOptions(divisions.map(n=>({value:n.companyCode, label:n.companyCode, group:"sortType"})));
return (divisions.map(n=>({value:n.companyCode, label:n.companyCode, group:"sortType"})));
};
return init();
},[])
.......
setDivisionOptions(setDivisionOptionsValue) -> setDivisionOptionsValue는 계속 Promise상태
divisionOptions[0].... -> 에러남
정상
useEffect(() => {
const init = async () => {
const [divisions] = await Promise.all([getDivisionList()]);
setDivisionOptions(divisions.map(n=>({value:n.companyCode, label:n.companyCode, group:"sortType"})));
setDivisionOptionsValue(divisions.map(n=>({value:n.companyCode, label:n.companyCode, group:"sortType"})));
};
init();
}, []);
.......
setDivisionOptions(setDivisionOptionsValue)
divisionOptions[0].... -> 정상동작
반응형
'react' 카테고리의 다른 글
react createContext, useContext, (0) | 2024.05.17 |
---|---|
react map key 설정안해주면 eiSettings + - 제대로 동작안했던듯 (0) | 2024.05.14 |
[페이지전환]react-router-dom<Link> window.href.location history.push()... (0) | 2024.03.27 |
react function Cannot access before initialization (0) | 2024.03.22 |
useRef - 여러개일때 배열로 사용하는 방법 (1) | 2024.02.20 |