首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >+ Context api

+ Context api
EN

Stack Overflow用户
提问于 2020-07-14 07:14:22
回答 1查看 607关注 0票数 0

我是相当新的反应钩子和上下文api。我试图在react中创建一个全局状态管理(没有redux),但是我遇到了这个错误。

TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))

我刚开始这个项目,只是尝试建立一个购物车(它将使用全局CartItem来跟踪总项目)。

GlobalStates.jsx (我的全局状态管理器文件)

代码语言:javascript
复制
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 GlobalContextWrapper

index.js

代码语言:javascript
复制
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 (试图访问上下文全局状态的文件)

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 07:56:12

您的代码工作正常,但是在测试中您需要正确导入上下文:import {CartContext} from "./GlobalStates"

代码语言:javascript
复制
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'));
代码语言:javascript
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62889864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档