Reactjs 为什么我的减速器没有使用redux触发?
各位早上好, 我刚刚在react项目上设置了redux。我愿意做的是在呈现组件仪表板时获取数据。数据是费用和收入变量,是所有费用和收入的总和 我遇到的问题是,我的减速器从未触发。我的控制台没有错误。 正如您在actions/dashboard.js中所看到的,我在调用fetchdata并正常工作时对日志进行了处理。但对setBalance的呼吁却没有 在reducers/dashboard.js中,在开关的情况下,默认情况总是被触发的,就像它没有找到动作类型一样 My Component Dashboard.jsReactjs 为什么我的减速器没有使用redux触发?,reactjs,redux,reducers,Reactjs,Redux,Reducers,各位早上好, 我刚刚在react项目上设置了redux。我愿意做的是在呈现组件仪表板时获取数据。数据是费用和收入变量,是所有费用和收入的总和 我遇到的问题是,我的减速器从未触发。我的控制台没有错误。 正如您在actions/dashboard.js中所看到的,我在调用fetchdata并正常工作时对日志进行了处理。但对setBalance的呼吁却没有 在reducers/dashboard.js中,在开关的情况下,默认情况总是被触发的,就像它没有找到动作类型一样 My Component Das
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()),
谢谢,()正如您告诉我的那样丢失了。我不敢相信我为此奋斗了两个小时。再次感谢各位