8

私が間違っている場合は修正してください。ただし、現在、replace を使用してこれを行うことはできません。replace は監視可能な配列全体を置き換え、代わりにマップを使用する必要があるためです。

次のような観測可能な配列があります。

@observable questionsList = [];

サーバー呼び出しでは、それぞれが異なるidフィールドを持つ 2 つのオブジェクトが読み込まれるため、次のようになります。

@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 を使用してこれを達成するにはどうすればよいですか?

4

1 に答える 1

10

監視可能なオブジェクトの各プロパティは順番に監視可能になるため、文字列を上書きするだけで済みます。

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);
于 2016-09-17T12:05:26.053 に答える