javascript - 在 React/Redux 中调度 Action 的问题

标签 javascript reactjs redux

我是 React 和 Redux 的新手,在我使用它的第一步中遇到了一些问题。我尝试按照 Redux 文档中的示例进行操作,但我很难理解所有内容,因为每个示例都在 ES5 - 6 甚至 7 语法之间跳跃。

但是,当我尝试发送一个 Action 时,出现了以下错误

Uncaught TypeError: (0 , _index2.default) is not a function

Error Message

我知道 SO 社区不喜欢在一个问题中包含这么多代码,但我不知道问题出在哪里。对不起!

这是我的代码:

索引.js

import 'babel-polyfill'
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import App from './containers/App'
import configureStore from './store/configureStore'

const store = configureStore()

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

我的商店

import { createStore, applyMiddleware } from 'redux'
import thunkMiddleware from 'redux-thunk'
import createLogger from 'redux-logger'
import index from '../reducers'

export default function configureStore(preloadedState) {
  const store = createStore(
    index,
    preloadedState,
    applyMiddleware(thunkMiddleware, createLogger())
   )

   if (module.hot) {
      // Enable Webpack hot module replacement for reducers
      module.hot.accept('../reducers', () => {
        const nextRootReducer = require('../reducers').default
        store.replaceReducer(nextRootReducer)
     })
    }

   return store
 }

我的容器组件

import React, { Component, PropTypes } from 'react'
import AddTodo from '../components/AddTodo'
import { connect } from 'react-redux'
import addItem from '../actions/index'

class App extends Component {
   constructor(props) {
    super(props)
    this.handleClick = this.handleClick.bind(this)
}

handleClick(e){
    console.log("click")
    console.log(e);
    const {dispatch} = this.props
    dispatch(addItem(e));
}

render() {
    return (
        <div>
        < h1 > Hallo </h1>
            <AddTodo handleAddItem={this.handleClick}/>
        </div>
       )
    }
}

App.propTypes = {
   dispatch: PropTypes.func.isRequired
}

function mapStateToProps(state){
   return {
      AddTodo
   }
 }

 export default connect (mapStateToProps)(App)

我的子组件:

import React, { Component, PropTypes } from 'react'
import addItem from '../actions/index'

export default class AddTodo extends Component {
   constructor(props) {
    super(props)
    this.handleClick = this.handleClick.bind(this)
    this.state = {newItem: ''}
  }

onChange(e){
    console.log("change")
    console.log(e.target.value);
    this.setState({newItem: e.target.value})
}

handleClick(e){
    this.props.handleAddItem(this.state.newItem)
   // const {dispatch} = this.props
   // console.log("clickc")
   // console.log(this.state.newItem);
   // dispatch(addItem(this.state.newItem))
}

render() {
    return (
        <div>
            <h3>Add Item </h3>
            <input
                type="text"
                value={this.state.newItem}
                onChange={this.onChange.bind(this)}
                />
            <button onClick={this.handleClick}>Hallo</button>
        </div>
    )
   }
  }

reducer

 export default (state = [], action) => {
   switch (action.type){
    case 'ADD_ITEM':
        return action.item
    }
  }

最后是 Action

export function addItem(item){
   console.log("addTOdo")
   return {
      type: 'ADD_ITEM',
      item
    }
  }

我希望有人能在这里帮助我,坐了几个小时,不明白发生了什么。

最佳答案

您没有默认导出 action creator。你还需要

export default function addItem(item){
   console.log("addTOdo")
   return {
      type: 'ADD_ITEM',
      item
    }
  }

import {addItem} from '../actions/index'

关于javascript - 在 React/Redux 中调度 Action 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37609382/

相关文章:

javascript - 插入DOM元素后如何使非事件javascript指令工作?

javascript - 页面加载后使用 JavaScript 将复选框设置为选中

javascript - 本地化:Php 和 Javascript

javascript - AngularJs 路由没有错误但不工作

javascript - 尽管已更新,但 React useState 钩子(Hook)仍返回旧状态值

javascript - 自定义单元格表 react 虚拟化

javascript - 在 React 的 render 方法中设置 CSS 变量是个好习惯吗?

javascript - Redux 的 reducer 遍历如何才能高效?

reactjs - React Redux 和继承

javascript - 类型错误 : Cannot read property 'actions' of undefined (React-Redux)