[英]Uncaught TypeError: object is not iterable -->using context with reducer
I am learning to use useContext and useReducer together but am getting an error I haven't managed to figure out:我正在学习一起使用 useContext 和 useReducer 但我遇到了一个我没有弄清楚的错误:
Uncaught TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
未捕获的类型错误:object 不可迭代(无法读取属性 Symbol(Symbol.iterator))
It occurred after destructuring the context inside MealItemForm.js.它发生在解构 MealItemForm.js 中的上下文之后。 I tried setting default value in createContext, importing with and without curly braces etc. I am trying to dispatch the function inside children component.
我尝试在 createContext 中设置默认值,导入带和不带大括号等。我试图在子组件中调度 function。 Any idea?
任何想法?
MealItemForm.js MealItemForm.js
import React,{useContext} from 'react';
import MeatContext from '../store/meat-context';
import Input from './Input';
import styles from "./MealItemForm.module.css"
function MealItemForm(props) {
const [meatState,dispatchMeatState]=useContext(MeatContext)
const handleClick=(event)=>{
event.preventDefault();
}
return (
<form className={styles.form}>
<Input/>
<button onClick={handleClick}>+ Add</button>
</form>
);
}
export default MealItemForm;
meat-context.js肉上下文.js
import React,{useReducer,useState} from 'react';
const MeatContext = React.createContext({meatState:[]});
export function MeatContextProvider(props) {
const meatReducer = (state, action) => {
if (action.type === 'ADD_MEAT') {
return [...meatState];
}
return { };
};
const [meatState, dispatchMeatState] = useReducer(meatReducer,
[
]
);
return (
<MeatContext.Provider value={{meatState:meatState,dispatchMeatState:dispatchMeatState}}>
{props.children}
</MeatContext.Provider>
);
}
export default MeatContext
The value provided to Context
is an object提供给
Context
的值是 object
{meatState:meatState,dispatchMeatState:dispatchMeatState}
But you're using array destructuring while getting the values但是您在获取值时使用数组解构
const [meatState, dispatchMeatState ] = useContext(MeatContext)
Using object destructuring should solve it,使用 object 解构应该可以解决它,
const { meatState, dispatchMeatState } = useContext(MeatContext)
Restructuring with {object} instead of [array] solves the issue使用 {object} 而不是 [array] 进行重组可以解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.