2017-06-15 104 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

嘿安东尼,感谢您的答复,但这并不是真正的解决方案。检查接受的答案,看看发生了什么。 –