2016-09-17 7 views
4

私が間違っている場合は私を訂正してください。しかし、現時点ではreplaceを使用することはできません。代わりにobservable配列全体を置き換え、代わりにmapを使用する必要があります。 MobX - 観測可能な配列のアイテムを置き換えますか?

は、私はこのような観察可能な配列があります。サーバー上で

@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を使用してこれを行うにはどうすればよいですか?あなただけの文字列を上書きすることができるように

+1

は何かが足りないかもしれませんが、なぜだけでなく: 'questionsList.find(質問=> question.id === ID).question =「です地球のフラット "? – mweststrate

答えて

4

観察可能なオブジェクトの各プロパティは、順番に、観察できるようになります。

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); 
+0

こんにちはTholle、はい、これは簡単に解決して解決します。しかし、基本的な問題は、上記の質問/回答フィールドの上に新しい更新オブジェクト 'newQuestion'をサーバーから返すときです。(例えば10個の追加フィールドで)、' oldQuestion'オブジェクト全体を上書きしたいのです。 'question'オブジェクトのそれぞれの特定のプロパティをリストアップし、それを一つずつ上書きします。基本的には一括して行い、 'question'オブジェクト全体を' id'の '1'に置き換えてください。どうすればいいですか? @Wonka Gotcha。 – Wonka

+0

答えを更新しました。 – Tholle

+1

ありがとうございます。よく働く! – Wonka

関連する問題