【问题标题】:"Unhandled Rejection (TypeError): Cannot read property 'dispatch' of undefined" react-redux error“未处理的拒绝(TypeError):无法读取未定义的属性'dispatch'”react-redux错误
【发布时间】:2021-03-11 01:39:27
【问题描述】:

我正在阅读 react-redux 教程。 我的 App.js 出现此错误。

“未处理的拒绝(TypeError):无法读取未定义的属性'dispatch'”

  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)得到了一个空数组,我想这意味着我的商店一开始就存在,但为什么我以后不能派出它?

【问题讨论】:

  • 好吧,我真是个白痴。我忘记将storage 变量初始化为全局(((

标签: javascript reactjs redux react-redux


【解决方案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);
    });
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2019-07-19
    • 1970-01-01
    • 2020-06-01
    • 2021-01-13
    相关资源
    最近更新 更多