2017-09-02 155 views
0

我的代码应该更新屏幕上的时间元素,并增加点击一个按钮的日期,但这不会发生。我不确定我在这里错过了什么。为什么我的Redux动作不能触发reducer?

actions.js

export const getTime =() => { 
    return ({ 
     type: "FETCH_TIME", 
     payload: Date.now() 
    }); 
}; 

export const incDate = (by) => { 
    console.log("in inc date"); 
    return ({ 
     type : "INCREASE_DATE", 
     payload : by 
    }); 
}; 

timeReducer.js

const timeReducer = (state = { 
    time : Date.now(), 
    date : 3 
}, action) => { 
    switch (action.type) { 
     case "FETCH_TIME": 
      state = { 
       ...state, 
       time: action.payload 
      }; 
      break 
     case "INCREASE_DATE": 
      state = { 
       ...state, 
       date : state.date + action.payload 
      }; 
      break; 
     default: 
      break; 
    } 
    return state; 
} 

export default timeReducer; 

store.js

import { 
    createStore, 
    applyMiddleware, 
    combineReducers 
} from "redux"; 
import thunk from "redux-thunk"; 
import promiseMiddleware from 'redux-promise-middleware'; 
import logger from "redux-logger"; 
import { 
    composeWithDevTools 
} from 'redux-devtools-extension'; 
import timeReducer from "../reducers/timeReducer"; 
const store = createStore(combineReducers({ 
    timeReducer 
}), {}, composeWithDevTools(applyMiddleware(thunk, promiseMiddleware, logger))); 
export default store; 

回答

-1

这不是如何你设置了你的减速器。你的减速器应该是一个功能,它返回新的状态。它不会修改作为赋值参数传递的状态,Redux的关键概念是不可变的。每the Redux documentation

减速机是一个纯粹的函数,它以前的状态和动作,以及返回下个状态

和额外的:

  • 我们不变异的state。我们创建了一个Object.assign()的副本。 [...]

  • 我们将以前的state返回default的情况。返回之前的状态对于任何未知动作很重要。

因此,你的减速应该是这样的:

switch (action.type) { 
    case "FETCH_TIME": 
     return { 
      ...state, 
      time: action.payload 
     }; 
    case "INCREASE_DATE": 
     return { 
      ...state, 
      date : state.date + action.payload 
     }; 
    default: 
     return state; 
} 

在上面的代码片段,而不是做state = { ... },减速,而不是返回应用程序的下一个状态。在默认情况下,还原器应该只返回当前状态。你可以摆脱最后的return

+0

嗨安德鲁, 我最初也试过这个,它没有工作。 代码永远不会到达减速文件:( –

+0

@ManarjanSinghGhai您是否正确设置你的店?你居然派出一个动作? – Li357

+0

基本动作都没有得到触发,即使记录器中间件心不是任何记录。 –

相关问题