«Необработанное отклонение (ошибка типа): не удается прочитать свойство «отправка» неопределенной ошибки» react-redux

#javascript #reactjs #redux #react-redux

#javascript #reactjs #redux #react-redux

Вопрос:

Я проходил обучение react-redux. Я получаю эту ошибку на своем App.js .

«Необработанное отклонение (ошибка типа): не удается прочитать свойство ‘отправка’ неопределенного»

   19 | class App extends React.Component {
  20 |   componentDidMount() {
  21 |     axios.get('http://localhost:3000/db.json').then(({ data }) => {
> 22 |       window.store.dispatch(setPizzas(data.pizzas));
  23 |     });
  24 |   }
  25 | 
 

Вот мой App.js:

 import React from 'react';
import { Route } from 'react-router-dom';
import axios from 'axios';

import { setPizzas } from './redux/actions/pizzas';
import { connect } from 'react-redux';

import { Header } from './components';
import { Home, Cart } from './pages';

class App extends React.Component {
  componentDidMount() {
    axios.get('http://localhost:3000/db.json').then(({ data }) => {
      window.store.dispatch(setPizzas(data.pizzas));
    });
  }

  render() {
    console.log(this.props.items);
    return (
      <div className='wrapper'>
        <Header />
        <div className='content'>
          <Route
            exact
            path='/'
            render={() => <Home items={this.props.items} />}
          />
          <Route exact path='/cart' component={Cart} />
        </div>
      </div>
    );
  }
}

const mapStateToProps = (state) => {
  return {
    items: state.pizzas.items,
  };
};

export default connect(mapStateToProps)(App);
 

Мой index.js:

 import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { Provider } from 'react-redux';

import store from './redux/store';

import './scss/app.scss';

import App from './App';

ReactDOM.render(
  <BrowserRouter>
    <Provider store={store}>
      <App />
    </Provider>
  </BrowserRouter>,
  document.getElementById('root')
);
 

Я попробовал console.log(this.props.items) и получил массив emty, я думаю, это означает, что мой магазин существует при запуске, но почему я не могу отправить его позже?

Комментарии:

1. Хорошо, я такой идиот. Я забыл инициализировать storage переменную как глобальную (((

Ответ №1:

 const mapDispatchToProps = dispatch => {
    return {
        onSetPizzas: (pizzas) => setPizzas(pizzas)
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(App);
 

и вызовите его, как показано ниже

  componentDidMount() {
    axios.get('http://localhost:3000/db.json').then(({ data }) => {
      props.onSetPizzas(data.pizzas);
    });
  }