TypeError: Object is not iterable (cannot read property Symbol(Symbol.iterator))
TypeError: Object is not iterable (cannot read property Symbol(Symbol.iterator))
我试过 运行 这段代码,但它给我一个运行时错误
TypeError: Object is not iterable (cannot read property
Symbol(Symbol.iterator))
这是代码。
import React, { useContext} from "react";
import { GlobalContext } from '../GlobalState';
const MediaCard = ({ songs, categotyTitle }) => {
const [{}, dispatch] = useContext(GlobalContext);
const setCurrentVideoSnippet = data => {
dispatch({ type: "setCurrentVideoSnippet", snippet: data });
};
export default MediaCard;
错误指向这行代码const [{}, dispatch] = useContext(GlobalContext);
GlobalState 代码
import React, { useReducer } from "react";
export const GlobalContext = React.createContext();
const initialState = {
currentVideoSnippet: {},
};
const reducer = (state, action) => {
switch (action.type) {
case "setCurrentVideoSnippet":
return {
...state,
currentVideoSnippet: action.snippet
};
default:
return state;
}
};
export const GlobalState = props => {
const globalState = useReducer(reducer, initialState);
return (
<GlobalContext.Provider value={globalState}>
{props.children}
</GlobalContext.Provider>
);
};
您似乎忘记了使用您当前使用时创建的提供程序包装您的组件:
<GlobalState>
<MediaCard />
</GlobalState>
我知道这并不能解决 OP 的问题,但是对于像我一样在这个页面上看到相同 运行 时间错误消息的人来说,我的问题是由于我导入的方式造成的GlobalContext 组件。
错误的方式:
import GlobalContext from '../GlobalState';
正确方法:
import { GlobalContext } from '../GlobalState';
这解决了我 运行 遇到的问题,但出现相同的错误消息。
下面是我的代码,它只是一个例子,向您展示为什么在您的代码中出现错误。
您创建的数据层没有包裹在整个网络应用程序的组件中,因此它无法被 MediaCard
组件识别...您需要做的只是进入您的index.js
并将 StateProvider
包裹在主应用程序周围
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import reducer, { initialState } from "./reducer";
import { StateProvider} from'./StateProvider';
ReactDOM.render(
<React.StrictMode>
<StateProvider initialState={ initialState } reducer={ reducer }>
<App />
</StateProvider>
</React.StrictMode>,
document.getElementById('root')
);
我试过 运行 这段代码,但它给我一个运行时错误
TypeError: Object is not iterable (cannot read property Symbol(Symbol.iterator))
这是代码。
import React, { useContext} from "react";
import { GlobalContext } from '../GlobalState';
const MediaCard = ({ songs, categotyTitle }) => {
const [{}, dispatch] = useContext(GlobalContext);
const setCurrentVideoSnippet = data => {
dispatch({ type: "setCurrentVideoSnippet", snippet: data });
};
export default MediaCard;
错误指向这行代码const [{}, dispatch] = useContext(GlobalContext);
GlobalState 代码
import React, { useReducer } from "react";
export const GlobalContext = React.createContext();
const initialState = {
currentVideoSnippet: {},
};
const reducer = (state, action) => {
switch (action.type) {
case "setCurrentVideoSnippet":
return {
...state,
currentVideoSnippet: action.snippet
};
default:
return state;
}
};
export const GlobalState = props => {
const globalState = useReducer(reducer, initialState);
return (
<GlobalContext.Provider value={globalState}>
{props.children}
</GlobalContext.Provider>
);
};
您似乎忘记了使用您当前使用时创建的提供程序包装您的组件:
<GlobalState>
<MediaCard />
</GlobalState>
我知道这并不能解决 OP 的问题,但是对于像我一样在这个页面上看到相同 运行 时间错误消息的人来说,我的问题是由于我导入的方式造成的GlobalContext 组件。
错误的方式:
import GlobalContext from '../GlobalState';
正确方法:
import { GlobalContext } from '../GlobalState';
这解决了我 运行 遇到的问题,但出现相同的错误消息。
下面是我的代码,它只是一个例子,向您展示为什么在您的代码中出现错误。
您创建的数据层没有包裹在整个网络应用程序的组件中,因此它无法被 MediaCard
组件识别...您需要做的只是进入您的index.js
并将 StateProvider
包裹在主应用程序周围
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import reducer, { initialState } from "./reducer";
import { StateProvider} from'./StateProvider';
ReactDOM.render(
<React.StrictMode>
<StateProvider initialState={ initialState } reducer={ reducer }>
<App />
</StateProvider>
</React.StrictMode>,
document.getElementById('root')
);