react js undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator))错误
2022-08-11
3865
因此,我正在尝试使用 React 制作一个待办事项应用程序,我刚刚尝试使用 Context,但一直收到未定义不可迭代:
这是 Main/index.js:
import React,{useContext} from "react";
import { BrowserRouter as Router,Routes, Route, Link} from 'react-router-dom';
import {GlobalContext} from "../Context/provider.js"
import TodoForm from "../Todo-Form/index.js"
import Description from "../Description/index.js"
import "./style.css";
export default function Main () {
const {todos, setTodos} = useContext(GlobalContext);
const addTodo = text => {
const newTodos = [...todos, { text }];
setTodos(newTodos);
};
const completeTodo = index => {
const newTodos = [...todos];
newTodos[index].isCompleted = newTodos[index].isCompleted ? false : true;
setTodos(newTodos);
};
这是 Context/provider.js:
import React from "react";
import { useState,createContext } from "react";
export const GlobalContext = createContext()
export const ContextProvider = ({children})=> {
const [todos, setTodos] = useState([
{
text: "You can write your to-do above and add",
isCompleted: false,
description: "hello",
id:0
},
]);
return(
<GlobalContext.Provider value = {{todos, setTodos}} >
{children}
</GlobalContext.Provider>
)
}
编辑已解决!! 除了我的问题: const {todos, setTodos} = useContext(GlobalContext); 事实证明,我没有使用提供程序包装,因此当我在 app.js 中执行此操作时,它有效:
<ContextProvider>
<div className="main-div">
<Header />
<Main />
</div>
</ContextProvider>
感谢所有查看并提供一些解决方案的人。
2个回答
问题可能出在这里:
const [todos, setTodos] = useContext({GlobalContext});
尝试输入
const [todos, setTodos] = useContext(GlobalContext);
(删除 GlobalContext 周围的括号),因为您传递的是带有 {GlobalContext: GlobalContext} 的对象,而不是仅将上下文作为参数传递。
除此之外,我还发现其他几个问题:
-
最主要的是您需要用在 provider.js 中定义的内容包装
<Main />
。然后,您可以将组件放入可以访问上下文的 ContextProvider 中。 - 修复 ContextProvider 中 children prop 中的拼写错误 这是一个沙盒: https://codesandbox.io/s/shy-meadow-8gf0sd?file=/src/App.js
dmc85
2022-08-11
问题是您在数组中插入了一个对象。如果您的全局上下文是一个数组,则应按如下方式设置值:
const [todos, setTodos] = useContext(GlobalContext);
之后,您可以遍历待办事项。
除此之外,我还看到了其他几个问题:
- 主要是您需要用从 provider.js 导入的内容进行包装。然后,您可以将组件放入可以访问上下文的 ContextProvider 中。
- 修复 ContextProvider 中 children prop 中的拼写错误
这是一个沙盒: https://codesandbox.io/s/shy-meadow-8gf0sd?file=/src/App.js
Arman
2022-08-11