You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Google克隆时使用Context API出现undefined不可迭代错误

解决React Context API解构错误:Uncaught TypeError: undefined is not iterable

错误原因

直接问题出在StateProvider.js的props拼写错误——你把children写成了childern,导致Context Provider没有正确渲染子组件,useContext(StateContext)返回的是默认值undefined,解构[{}, dispatch]时自然会抛出“undefined不可迭代”的错误。

修复步骤

  1. 修正StateProvider的props拼写
    把childern改成正确的children,修复后的StateProvider.js代码:
import React, { createContext, useContext, useReducer } from "react";

export const StateContext = createContext();

export const StateProvider = ({ reducer, initialState, children }) => (
    <StateContext.Provider value={useReducer(reducer, initialState)}>
        {children} 
    </StateContext.Provider>
);

export const useStateValue = () => useContext(StateContext);
  1. 检查根组件的Context包裹逻辑
    确保在根组件(如App.js)中用StateProvider正确包裹所有需要访问Context的组件,并且传入了合法的reducer和initialState:
import { StateProvider } from './StateProvider';
import { reducer, initialState } from './reducer';

function App() {
  return (
    <StateProvider reducer={reducer} initialState={initialState}>
      {/* 这里放置你的应用组件,包括Search组件 */}
    </StateProvider>
  );
}
  1. 补全Search组件的缺失导入
    你的Search.js代码里漏了useState和useNavigate的导入,需要补上:
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { useStateValue } from "./StateProvider";
import { actionTypes } from './reducer';

function Search({ hideButtons = false })
{
    const [{}, dispatch] = useStateValue();

    const [input, setInput] = useState('')
    const history = useNavigate();

    const search = (e) => {
        e.preventDefault();

        console.log('you hit search', input);

        dispatch({
            type: actionTypes.SET_SEARCH_TERM,
            term: input
        })

        history('/search');
    }
    // 记得返回组件JSX
    return (
        // 你的Search组件UI代码
    )
}

内容的提问来源于stack exchange,提问作者Sudheshna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:01:01