Javascript 分派不是reducer中的一个函数

Javascript 分派不是reducer中的一个函数,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我的行动 const fetchDataApi = (getState) => { let { data } = getState() return axios.get('http://api.openweathermap.org/data/2.5/weather?q=london,uk&appid=26aacf43db7ecfa2ecd85500eaee9920').then(thunkdata => { co

我的行动

    const fetchDataApi = (getState) => {
        let { data } = getState()
        return axios.get('http://api.openweathermap.org/data/2.5/weather?q=london,uk&appid=26aacf43db7ecfa2ecd85500eaee9920').then(thunkdata => {
            console.log(thunkdata)
            return {
                [data]: thunkdata
            }
        })
    }

const fetchgetDataCall = () => {
    return (dispatch, getState) => {
        return dispatch(fetchDataApi(getState))
    }

}


export const getData = (dispatch) => {
    dispatch(fetchgetDataCall())
    return {
        type: actionTypes.GETDATA,

    }
}
在action.js中,我希望从我的api获取数据并存储在数据中,因此我使用getstate获取数据变量并将数据分配给它

我的日历组件,在其中我将被叫者连接到actionType

import React, { Component } from 'react';
// import 'moment/locale/it.js';
import { DatePicker, DatePickerInput } from 'rc-datepicker';
// import { ca } from 'date-fns/esm/locale';
import 'rc-datepicker/lib/style.css';


import { connect } from 'react-redux';
import  { getData } from '../store/actions/actions'

const date = '2015-06-26' // or Date or Moment.js


class Callender extends Component {
    //These is a method  es7

    onChangeandler = (jsDate, dateString, event) => {
        // event.preventDefault()
        console.log("[we are lokking at js date]",jsDate);
        this.props.getWether();
        console.log("[we are seeing the props storeDta]",this.props.storeData);

    }

    //Next method 

    render() {
        return (
            <div>
                <DatePicker onChange={this.onChangeandler} value={date} />
            </div>
        )
    }
}

const mapStateToProps = state  =>({
    storeData: state.data
})

const mapDispatchToProps = (dispatch)  =>({
    getWether: () => dispatch(getData())
})

export default connect(mapStateToProps,mapDispatchToProps)(Callender)
actionTypes.js

export const  POSTDATA="POSTDATA";
export const GETDATA = "GETDATA";
1) 我正在callender.js文件中调用我的动作创建者

2) 在这里,我使用thunk中间件获取数据,并将其存储在redux store中的数据变量中


3) 我找不到问题,请帮帮我你的行为看起来很奇怪。
getData
action创建者分派
fetchgetDataCall
,该调用分派
fetchDataApi
,并且只返回一些对象
{[data]:thunkdata}
,其中属性
数据
此时可能为空。因此,操作对象中没有任何属性
类型
数据

getData
所做的第二件事是返回对象
{type:actionTypes.getData}
,因此在动作对象中没有任何属性
data

尝试这样做(根据@mbojko答案更新):

const getData=()=>{
返回(发送)=>{
返回axios.get('http://api.openweathermap.org/data/2.5/weather?q=london,uk&appid=26aacf43db7ecfa2ecd85500eaee9920')。然后(thunkdata=>{
退货({
类型:actionTypes.GETDATA,
数据:thunkdata
})
})
}
}

你的行为看起来很奇怪。
getData
action创建者分派
fetchgetDataCall
,该调用分派
fetchDataApi
,并且只返回一些对象
{[data]:thunkdata}
,其中属性
数据
此时可能为空。因此,操作对象中没有任何属性
类型
数据

getData
所做的第二件事是返回对象
{type:actionTypes.getData}
,因此在动作对象中没有任何属性
data

尝试这样做(根据@mbojko答案更新):

const getData=()=>{
返回(发送)=>{
返回axios.get('http://api.openweathermap.org/data/2.5/weather?q=london,uk&appid=26aacf43db7ecfa2ecd85500eaee9920')。然后(thunkdata=>{
退货({
类型:actionTypes.GETDATA,
数据:thunkdata
})
})
}
}

比较您的函数签名

export const getData = (dispatch) => {
你如何称呼它:

const mapDispatchToProps = (dispatch)  =>({
    getWether: () => dispatch(getData())
})
缺少参数(因此未定义
dispatch
,显然不是函数)


可能应该是
dispatch(getData(dispatch))

比较函数签名

export const getData = (dispatch) => {
你如何称呼它:

const mapDispatchToProps = (dispatch)  =>({
    getWether: () => dispatch(getData())
})
缺少参数(因此未定义
dispatch
,显然不是函数)


应该是
dispatch(getData(dispatch))
,可能吧。

你能展示一下你创建redux商店的代码吗?你能展示一下你创建redux商店的代码吗?我在回答中根据@mbojko的答案编辑了代码。非常感谢,但我错过了什么?我教过我可以拆分代码并使用它。我想我做了同样的事情,但划分了代码。我想我做了什么missedI根据@mbojko的答案编辑了我答案中的代码。非常感谢,但是我错过了什么我教过我可以拆分代码并使用它。我想我做了同样的事情,但拆分了代码我错过了什么我尝试了,然后我得到的错误动作必须是普通对象。对异步操作使用自定义中间件。因为您的
fetchgetDataCall
返回的是函数而不是普通对象。很抱歉打扰您,但我使用dispatch执行函数,而dispatch反过来返回对象是的,我尝试了,然后得到的错误操作必须是普通对象。对异步操作使用自定义中间件。因为您的
fetchgetDataCall
返回的是函数而不是普通对象。很抱歉打扰您,我使用dispatch执行了函数,而dispatch又返回了对象