react-native - 在 Reducer 中处理复杂对象
问题描述
我有一个类似于我在下面给出的复杂数据。
const initialState = {
medicationschedule: [
{
date: '2019-08-27',
medications: [
{
title: '8.00 AM',
id:'1111',
data: [
{name:'item1', isTaken: 1,mg: '500 mg',capsules:'capsule'},
{name:'item2', isTaken: 4,mg: '2000 mg',capsules:'teaspoon'}
]},
{
title: '12.03 PM',
id:'11112',
data: [
{name:'item3', isTaken: 2,mg: '500 mg',capsules:'capsule'},
{name:'item4', isTaken: 1,mg: '500 mg',capsules:'capsule'}
]},
{
title: '3.30 PM',
id:'11113',
data: [
{name:'item1', isTaken: 3,mg: '500 mg',capsules:'capsule'}
]},
]
},
{
date: '2019-08-26',
medications: [
{
title: '8.00 AM',
id:'11151',
data: [
{name:'item1', isTaken: 1,mg: '500 mg',capsules:'capsule'},
{name:'item2', isTaken: 4,mg: '2000 mg',capsules:'teaspoon'}
]},
]
}
],
selectedDate: Date()
};
现在我必须更新isTaken
药物数组中的状态。我为我的 reducer 获得了足够的数据(dateString、idOfMedication、nameOfMedication)。但我不得不继续在数组内部循环。
我的减速机
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case CHANGE_DATE:
console.log(action.payload)
return {...state, selectedDate: action.payload}
case CHANGE_MEDICATION_TAKEN_STATUS:
console.log(action.date +" "+ action.id +" "+ action.name +" "+ action.takenStatus)
return state;
}
return state;
};
我应该如何在减速器中改变这个状态。有人可以帮我吗。
解决方案
您需要按日期查找时间表,并在时间表内按 id 查找项目:
case CHANGE_MEDICATION_TAKEN_STATUS:
const schedule = state.medicationschedule.map(schedule => {
if (schedule.date === action.date) {
schedule = {
...schedule,
medications: schedule.medications.map(medication => {
if (medication.id === action.id) {
medication = {
...medication,
isTaken: action.takenStatus
}
}
return medication
})
}
}
return schedule;
})
return {
...state,
medicationschedule: schedule
};
推荐阅读
- javascript - 为什么我的 apolloFetch 调用在从 promise.all 中调用时返回一个空查询?
- c# - BindableProperty 的 SetValue 在设置为 null 时不会触发 PropertyChanged 事件
- xml - InDesign:生成没有样式定义的 ICML 文件
- sqlite - Sqlite | 如何使用 Case 从两个不同的表中选择记录?
- python - 如何访问结构化数组的子数组中的特定条目
- php - MySQL 使用 WHERE 语句来定位特定行
- multithreading - 检查java中的异步线程状态
- google-cloud-platform - Google Cloud 的 Speech to text API 中的音频超时错误
- data-structures - 队列的数组实现比堆栈的数组实现更难管理,True/False
- html - 图片无法在 IE11 中加载