← 문제 목록
고급 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%