我是相当新的反应钩子和上下文api。我试图在react中创建一个全局状态管理(没有redux),但是我遇到了这个错误。
TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))
我刚开始这个项目,只是尝试建立一个购物车(它将使用全局CartItem来跟踪总项目)。
GlobalStates.jsx (我的全局状态管理器文件)
import React from 'react';
export const CartContext = React.createContext(0)
const GlobalContextWrapper = (props) => {
const [cartItem,incCartItem] = React.useState(0);
return(
<CartContext.Provider value={[cartItem,incCartItem]}>
{props.children}
</CartContext.Provider>
)
}
export default GlobalContextWrapperindex.js
import React from 'react';
import ReactDOM from 'react-dom';
import GlobalContextWrapper from "./GlobalStates.jsx"
import Test from "./Test.jsx"
const Main = () => {
return(
<GlobalContextWrapper>
<Test/>
</GlobalContextWrapper>
)
}
ReactDOM.render(<Main/>,document.getElementById('root'));Test.jsx (试图访问上下文全局状态的文件)
import React from 'react';
import CartContext from "./GlobalStates"
const Test = () => {
const [cartItem,incCartItem] = React.useContext(CartContext)
return(
<h1>The cart total is {cartItem}</h1>
)
}
export default Test发布于 2020-07-14 07:56:12
您的代码工作正常,但是在测试中您需要正确导入上下文:import {CartContext} from "./GlobalStates"
const CartContext = React.createContext(0);
const GlobalContextWrapper = (props) => {
const [cartItem, incCartItem] = React.useState(0);
return (
<CartContext.Provider value={[cartItem, incCartItem]}>
{props.children}
</CartContext.Provider>
);
};
const Test = () => {
const [cartItem, incCartItem] = React.useContext(
CartContext
);
return <h1>The cart total is {cartItem}</h1>;
};
const Main = () => {
return (
<GlobalContextWrapper>
<Test />
</GlobalContextWrapper>
);
};
ReactDOM.render(<Main />, document.getElementById('root'));<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
https://stackoverflow.com/questions/62889864
复制相似问题