Reactjs 为什么我的减速器没有使用redux触发?

Reactjs 为什么我的减速器没有使用redux触发?,reactjs,redux,reducers,Reactjs,Redux,Reducers,各位早上好, 我刚刚在react项目上设置了redux。我愿意做的是在呈现组件仪表板时获取数据。数据是费用和收入变量,是所有费用和收入的总和 我遇到的问题是,我的减速器从未触发。我的控制台没有错误。 正如您在actions/dashboard.js中所看到的,我在调用fetchdata并正常工作时对日志进行了处理。但对setBalance的呼吁却没有 在reducers/dashboard.js中,在开关的情况下,默认情况总是被触发的,就像它没有找到动作类型一样 My Component Das

各位早上好,

我刚刚在react项目上设置了redux。我愿意做的是在呈现组件仪表板时获取数据。数据是费用和收入变量,是所有费用和收入的总和

我遇到的问题是,我的减速器从未触发。我的控制台没有错误。 正如您在actions/dashboard.js中所看到的,我在调用fetchdata并正常工作时对日志进行了处理。但对setBalance的呼吁却没有

在reducers/dashboard.js中,在开关的情况下,默认情况总是被触发的,就像它没有找到动作类型一样

My Component Dashboard.js

import React, {useEffect} from 'react'

import classes from './Dashboad.module.css'
import { Doughnut } from 'react-chartjs-2'
import {connect} from 'react-redux'
import * as actions from '../../store/actions/index'

const DashBoard = (props) => {

    useEffect(() => {
        props.onFetchData()
    }, [])
// ----------------------------------- Hidden code to not overload the topic -------------------
const mapStateToProps = state => {
    return {
        incomes: state.incomes,
        expenses: state.expenses
    }
}

const mapDispatchToProps = dispatch => {
    return {
        onFetchData: () => dispatch(actions.fetchData),
    }
}

export default connect(mapStateToProps,mapDispatchToProps)(DashBoard);
import * as actionsTypes from './actionsTypes'
import axios from '../../axios'

export const setBalance = (donnees) => {
    console.log('setbalance')
    return {
        type: actionsTypes.SET_BALANCE, 
        donnees: donnees
    }
}

export const fetchData = () => {
    console.log('call fetchdata')
    return dispatch => {
        axios.get('/movements.json')
        .then(response => {
            dispatch(setBalance(response.data))
            console.log(response.data)
        })
        .catch(error => console.log(error))
    }
}
actions/index.js:

export {
    fetchData
} from './dashboard'
actions/actionsTypes.js:

export const SET_BALANCE = 'SET_BALANCE'
操作/Dashboard.js

import React, {useEffect} from 'react'

import classes from './Dashboad.module.css'
import { Doughnut } from 'react-chartjs-2'
import {connect} from 'react-redux'
import * as actions from '../../store/actions/index'

const DashBoard = (props) => {

    useEffect(() => {
        props.onFetchData()
    }, [])
// ----------------------------------- Hidden code to not overload the topic -------------------
const mapStateToProps = state => {
    return {
        incomes: state.incomes,
        expenses: state.expenses
    }
}

const mapDispatchToProps = dispatch => {
    return {
        onFetchData: () => dispatch(actions.fetchData),
    }
}

export default connect(mapStateToProps,mapDispatchToProps)(DashBoard);
import * as actionsTypes from './actionsTypes'
import axios from '../../axios'

export const setBalance = (donnees) => {
    console.log('setbalance')
    return {
        type: actionsTypes.SET_BALANCE, 
        donnees: donnees
    }
}

export const fetchData = () => {
    console.log('call fetchdata')
    return dispatch => {
        axios.get('/movements.json')
        .then(response => {
            dispatch(setBalance(response.data))
            console.log(response.data)
        })
        .catch(error => console.log(error))
    }
}
减速器/Dashboard.js:

import * as actionsTypes from '../actions/actionsTypes'

const initialState = { 
    incomes: 0, 
    expenses: 0
}

const setBalance = (state, action) => {
    let fetchedMvts = []
    for(let key in action.donnees.data) {
        fetchedMvts.push({...action.donnees.data[key]})
    }
    let sumIncome = 0;
    let sumOutcome = 0;
    fetchedMvts.forEach(element => {
        let parsed = parseInt(element.amount, 10)
        if(element.type === "income") {
            sumIncome = sumIncome + parsed;
        } else {
            sumOutcome = sumOutcome + parsed;
        }
    })
    return {...state, incomes: sumIncome, expenses: sumOutcome}
}

const reducer = (state= initialState, action) => {
    console.log('TYPE', action.type)
    switch (action.type) {
        case actionsTypes.SET_BALANCE: return setBalance(state, action);
        default: 
        console.log('problem')
        return state;
    }
}

export default reducer;
如果您需要,我的应用程序的index.js文件:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { Provider } from 'react-redux'
import { createStore, applyMiddleware} from 'redux'
import * as serviceWorker from './serviceWorker';
import RootReducer from './store/reducers/dashboard'
import thunk from 'redux-thunk'

const store = createStore(RootReducer, applyMiddleware(thunk))

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

serviceWorker.unregister();
从“React”导入React;
从“react dom”导入react dom;
导入“./index.css”;
从“./App”导入应用程序;
从“react redux”导入{Provider}
从“redux”导入{createStore,applyMiddleware}
将*作为serviceWorker从“/serviceWorker”导入;
从“./store/reducers/dashboard”导入RootReducer
从“redux thunk”导入thunk
const store=createStore(RootReducer、applyMiddleware(thunk))
ReactDOM.render(
,
document.getElementById('root'))
);
serviceWorker.unregister();
谢谢你们的帮助,伙计们


祝你度过愉快的一天

当你记录
操作时,你会得到什么。在你的减速机中键入
?另外,日志是否在
setBalance
中被调用?
onFetchData:()=>dispatch(actions.fetchData),
=>
onFetchData:()=>dispatch(actions.fetchData()),
谢谢,()正如您告诉我的那样丢失了。我不敢相信我为此奋斗了两个小时。再次感谢各位