2016-11-04 60 views
0

在我的反應應用程序中,我預先加載了名爲activeWord的reducer。未捕獲TypeError:無法在數字'0'上創建屬性'activeWord'

activeWord: 0 

然後我已經在根減速器加入activeWord

import {combineReducers} from 'redux'; 
import activeWord from './ActiveWordReducer'; 

const root_reducer=combineReducers({ 

    activeWord:activeWord 
}); 

export default root_reducer; 

然後在ActiveWordReducer文件:

export default function WordReducer(state=null,action){ 
    switch(action.type){ 
     case "Active_Word": 
     return state.activeWord++; 
    } 
    return 0; 
} 

問題是,在線路state.activeWord++,它產生一個錯誤:

Uncaught TypeError: Cannot create property 'activeWord' on number '0' 

那麼我該如何解決這個問題?

更新

在減速

我也試圖返回狀態,但我仍然得到了同樣的錯誤:

export default function WordReducer(state=null,action){ 
    switch(action.type){ 
     case "Active_Word": 
     return state.activeWord++; 
    } 
    return state; 
} 
+0

我相信你'state'已經'activeWord'本身,所以你只需要因爲減速器獲得切片的國家也這樣做'狀態++' – yuyokk

+0

,不整個一個 – yuyokk

回答

0

有,我想提三個問題:

  • 功能combineReducers需要一個對象,其中關鍵是減速函數的名稱和值應該是狀態的屬性的名稱傳遞給減速器。所以,對於你的情況,它應該是, const root_reducer = combineReducers({ activeWord: activeWord }); 但是,如果它的情況下,你有一個稱爲activeWord減速機最終會調用WordReducer,那麼請忽略此建議。也許,您想將WordReducer重命名爲wordReducer
  • 在您的WordReducer函數中,state現在代表activeWord。所以,這只是一個數字。這就是爲什麼你得到這個錯誤。
  • 不要改變你的對象。只需返回state + 1。並保持不變所有大寫。

所以,你的減速應該是什麼樣子, export default function WordReducer(state = 0, action) { switch(action.type) { case "ACTIVE_WORD": return state + 1; default: return state; } }

1

的問題是你的減速收益爲0的狀態。

當應用程序狀態被初始化時,所有的reducer被調用。由於WordReducer返回0,ActiveWordReducer默認狀態是0

如果您觸發動作Active_Word,您想要在ActiveWordReducer狀態下閱讀activeWord。但這是不可能的,因爲州是0。這就像做0.activeWord。解決的辦法是要做到:

var defaultState = {activeWord : 0}; 

export default function WordReducer(state=defaultState ,action){ 
    switch(action.type){ 
    case "Active_Word": 
     return state.activeWord++; 
    } 
    return state; 
} 

其結果是,如果你的減速狀態尚未初始化,它會創建一個狀態{activeWord : 0}

請記住,你的減速機必須始終返回state參數如果沒有任何action.type匹配您的交換機案例。

+0

我已經returend **狀態**,也刪除了預加載部分,並設置** var defaultState = {activeWord:0}; **但1行動後仍然會出現同樣的錯誤? –

+0

在線調試'return state.activeWord ++;',狀態怎麼樣? –

+0

對象{activeWord:0} –

相關問題