我正在使用React Native和Redux来构建我正在构建的应用程序。我还使用了两个npm模块,react-native-simple-store和redux promise。在我继续解释我的问题时,我将解释各自的用法。
我有一个基本的动作创建者,可以在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
}
}
在我的reducer中,我希望收到我在我的动作创建者中要求的数组。但是,它不起作用,我最终每次返回一个空数组。这是我的减速机:
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中进入reducer的操作时,我在控制台中看到了这一点:
Object { type: "get_alarms", payload: Array(3) }
payload: Array(3)
0: Object
1: Object
2: Object
type: "get_alarms"
这是我想要的数据,它只是一个包含3个对象的数组。它在那里,但我错过了一些东西。
对此有何帮助?
答案 0 :(得分:3)
减速机出现两个错误
您错误地导入了ACtion Constant,因为它不是默认导出,您需要使用{}
在Swtich案例中,使用不带引号的导入变量。
您的代码
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
}
答案 1 :(得分:0)
根据您的减速机,您的行动应该是大写字母:
export const GET_ALARMS = 'GET_ALARMS'
。
您的开关机箱区分大小写。这就是你永远不会参与此案的原因。