如果我错了,请纠正我,但目前使用replace是不可能的,因为替换会替换整个可观察数组而应该使用map?
我有一个这样的可观察数组:
@observable questionsList = [];
在服务器调用时,它会填充2个对象,每个对象都有一个不同的id
字段,所以它看起来像这样:
@observable questionsList = [
{id: 1,
question: "Is the earth flats?",
answer: "Some long answer here..."
{id: 2,
question: "Does the moon have life?"}
answer: "Some long answer here..."}
];
因此ID为1
的问题有一个需要修复的拼写错误,应为Is the earth flat?
鉴于以下内容:
const newQuestionId = 1;
const newQuestion = "Is the earth flat?"
const oldQuestion = this.questionsList.find(question => question.id === newQuestionId);
oldQuestion.replace(newQuestion) // Would be nice if this syntax worked
现在我有了正确的oldQuestion
但是如何在questionList
数组中用新问题替换它?我试过替换,但它没有用。地图是唯一的方式吗?如果是这样,我不知道如何让地图工作,因为我只使用了可观察数组。
如何使用MobX完成此操作?
答案 0 :(得分:7)
可观察对象的每个属性都将是可观察的,因此您可以只覆盖该字符串:
const newQuestionId = 1;
const newQuestion = "Is the earth flat?"
const oldQuestion = this.questionsList.find(q => q.id === newQuestionId);
oldQuestion.question = newQuestion;
如果您想要使用新问题对象中的其他字段,并且还可以观察这些新字段,则可以使用extendObservable:
const oldQuestion = this.questionsList.find(q => q.id === newQuestionId);
extendObservable(oldQuestion, newQuestionObject);