Angular 角度/离子-Ngrx-更新阵列中的对象
我正在使用离子+角度+Ngrx和Firebase/Angularfire。我对所有这些都是相当陌生的(除了Firebase),并且有React开发的背景。我创建了一个非常简单的笔记应用程序,它将数据存储在Firebase中,并从FB获取旧笔记。我让所有的工作,但决定把Ngrx的国家管理。我在获取和创建方面没有问题,但是更新部分有点棘手 我从Firebase获得了一个对象数组,我希望能够只更新单个对象数据。下面是一张Ngrx状态图,需要澄清 我希望能够更新对象nr2中的描述文本。我如何管理它? 在数组中创建新对象不是问题。此代码适用于以下情况:Angular 角度/离子-Ngrx-更新阵列中的对象,angular,ionic-framework,ngrx,ngrx-store,ngrx-entity,Angular,Ionic Framework,Ngrx,Ngrx Store,Ngrx Entity,我正在使用离子+角度+Ngrx和Firebase/Angularfire。我对所有这些都是相当陌生的(除了Firebase),并且有React开发的背景。我创建了一个非常简单的笔记应用程序,它将数据存储在Firebase中,并从FB获取旧笔记。我让所有的工作,但决定把Ngrx的国家管理。我在获取和创建方面没有问题,但是更新部分有点棘手 我从Firebase获得了一个对象数组,我希望能够只更新单个对象数据。下面是一张Ngrx状态图,需要澄清 我希望能够更新对象nr2中的描述文本。我如何管理它?
on(NoteActions.createSingleField, (state, action) => {
const id = action.data.id;
const current = state.entities[action.data.id]?.[action.data.type];
return adapter.updateOne(
{
id,
changes: {
[action.data.type]: [
...current,
{ description: action.data.description },
],
},
},
state
);
}),
我尝试了上述代码的不同变体,但仍然无法使其正常工作。我也试过:
const test = state.entities[id]?.[type].map((obj, i) => {
console.log('obj; ', i);
return i === 0
? (obj.description = action.data.description)
: obj.description;
});
但这只会给出以下错误信息:
错误类型错误:无法分配到的只读属性“说明”
对象“[对象]”
谢谢你的帮助
更新-解决方案
经过一番挣扎,我终于找到了解决办法。如果有人想弄明白,我会和你分享
const current = state.entities[action.data.id]?.
[action.data.type].slice();
current.splice(currentIndex, 1, { description: action.data.description });
首先,我使用.slice()创建了当前实体状态的副本。[]中的代码仅表示字段名是动态的。然后,我使用当前索引执行了.splice()操作,并将旧数据替换为新数据。然后我使用updateOne()更新了存储/实体。想起来很简单,我不知道为什么花了这么长时间才弄明白。希望解决方案能对您有所帮助
return adapter.updateOne(
{
id,
changes: {
[action.data.type]: [...current],
},
},
state
);