← 문제 목록
고급
React
100P
useReducer dispatch 참조 안정성 오해
dispatch를 useEffect 의존성에서 제외했더니 ESLint 경고 없이 작동하지만, 복잡한 시나리오에서 state가 꼬입니다. 버그를 찾으세요:
JSX
function reducer(state, action) {
switch (action.type) {
case 'SET_DATA':
return { ...state, data: action.payload };
case 'SET_ERROR':
return { ...state, error: action.payload };
default:
return state;
}
}
function DataFetcher({ url }) {
const [state, dispatch] = useReducer(reducer, { data: null, error: null });
const fetchData = useCallback(async () => {
try {
const res = await fetch(url);
const json = await res.json();
dispatch({ type: 'SET_DATA', payload: json });
} catch (err) {
dispatch({ type: 'SET_ERROR', payload: err.message });
}
}, [url]);
useEffect(() => {
fetchData();
}, [fetchData]);
return state.error
? <p>에러: {state.error}</p>
: <pre>{JSON.stringify(state.data)}</pre>;
}
0명 풀이 · 정답률 0%