Диспетчер не является функцией редуктора - PullRequest
0 голосов
/ 09 октября 2019

МОЕ действие

    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)

Мой редуктор

import  * as actionType from '../actions/actionTypes';

    const intialState ={
        time:null,
        day:null,
        data:null
    }

    // reducer 
    const reducer = (state=intialState, action) =>{
        switch(action.type){
            case actionType.GETDATA:
                return {
                    ...state,
                    data:action.data
                }
            case actionType.POSTDATA:
                return {
                    ...state
                }
            default : 
              return {
                  ...state
              }

        }
    }


    export default  reducer;

actionTypes.js

export const  POSTDATA="POSTDATA";
export const GETDATA = "GETDATA";

1) Я звонюсоздатель моих действий в файле callender.js

2) Где я использую промежуточное программное обеспечение thunk для получения данных и хранения в переменной данных из хранилища redux

3) Не могу найти проблему, пожалуйстапомоги мне

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Сравните сигнатуру вашей функции

export const getData = (dispatch) => {

С тем, как вы ее называете:

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

Аргумент отсутствует (поэтому dispatch не определен и, очевидно, не является функцией).

Должно быть dispatch(getData(dispatch)), вероятно.

1 голос
/ 09 октября 2019

Ваши действия выглядят довольно странно. Создатель действия getData отправляет fetchgetDataCall, который отправляет fetchDataApi и возвращает только некоторый объект { [data]: thunkdata}, где свойство data в этот момент, вероятно, равно нулю. Следовательно, в вашем объекте действия отсутствуют какие-либо свойства type или * 1007. *

Второе, что делает ваш getData, - это возврат объекта {type: actionTypes.GETDATA}, следовательно, нет никакого свойства dataв вашем объекте действия.

Попробуйте сделать это примерно так (обновлено в соответствии с ответом @mbojko):

const getData = () => {
    return (dispatch) => {
        return axios.get('http://api.openweathermap.org/data/2.5/weather?q=london,uk&appid=26aacf43db7ecfa2ecd85500eaee9920').then(thunkdata => {
            return dispatch({
                type: actionTypes.GETDATA,
                data: thunkdata
            })
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...