2017-06-15 148 views
1

我正在使用React Native和Redux來創建應用程序。我也使用了兩個npm模塊,react-native-simple-store和redux promise。我將解釋每個問題的用法,因爲我會繼續解釋我的問題。Redux返回默認值

我有一個基本動作創建器,在componentWillMount方法中觸發。這個動作創建者的目的是從用戶的設備中檢索一組數據。我使用react-native-simple-store來執行此操作,因爲它始終會將您請求的數據作爲承諾返回。這裏是我的行動的創建者:

import store from 'react-native-simple-store' 
export const GET_ALARMS = 'get_alarms' 

export const getAlarms =() => { 
    // this variable will hold the promise 
    let alarms = store.get('alarms') 

    return { 
    type: GET_ALARMS, 
    payload: alarms 
    } 
} 

在我減速,我希望接收陣列,我要求我的行動的創建者。但是,它不起作用,並且每次都返回一個空數組。這裏是我的減速器:

import GET_ALARMS from '../actions/getAlarms' 

export default (state = [], action) => { 
    console.log(action) 
    switch (action.type) { 
    case 'GET_ALARMS': 
     return [...state, action.payload] 
    } 

    return state 
} 

有趣的是,當我CONSOLE.LOG行動進入減速機,我看到這個控制檯:

Object { type: "get_alarms", payload: Array(3) } 
    payload: Array(3) 
     0: Object 
     1: Object 
     2: Object 
    type: "get_alarms" 

這就是我想要的數據,只是一個包含3個對象的數組。它在那裏,但我錯過了一些分鐘。

對此有幫助嗎?

回答

3

兩個錯誤

  1. 已導入動作恆錯誤,因爲它不是一個默認的導出,你需要使用{}

  2. 在馬桶蓋的情況下使用這種進口變量不引號。

您的代碼

import {GET_ALARMS} from '../actions/getAlarms' 

export default (state = [], action) => { 
    console.log(action) 
    switch (action.type) { 
    case GET_ALARMS: 
     return [...state, action.payload] 
    } 

return state 
} 
+0

哦,夥計,謝謝你。不能相信我錯過了這一點。 –

+0

高興地幫助丹尼爾:) –

0

根據你減速,你的動作應該是大寫字母:

export const GET_ALARMS = 'GET_ALARMS'

您的開關盒區分大小寫。這就是爲什麼你永遠不會進入案件。在減速

+1

嘿安東尼,感謝您的答覆,但這並不是真正的解決方案。檢查接受的答案,看看發生了什麼。 –