React Hook + Context API - PullRequest
       113

React Hook + Context API

0 голосов
/ 14 июля 2020

Я новичок в React Hooks и context api. Я пытаюсь создать глобальное управление состоянием в рамках реакции (без сокращения), но я столкнулся с этой ошибкой.

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 GlobalContextWrapper

index. 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

1 Ответ

0 голосов
/ 14 июля 2020

Ваш код работает нормально, но в тесте вам нужно правильно импортировать контекст: 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...