私はReactをMobXと組み合わせて使用しています。私は観測可能な配列(会話)を持つストアを使用し、この配列のソートされたバージョンを計算されたプロパティとして提供したいと考えています。新しい会話を追加する場合、会話が配列に追加される前に、計算されたプロパティsortedConversationsが評価されます。以下の小さな例では、「会話の並べ替え」は常に「追加された会話」の前に記録されます。私は何か間違っているのですか?実際に配列に項目が挿入される前にMobX計算が実行される
class Store {
...
@observable conversations = [];
addConversation(conversation) {
this.conversations.push(conversation);
console.log('Added conversation');
}
@computed
get sortedConversations() {
console.log('Reordering conversations');
return _.orderBy(this.conversations.slice(), ['lastUpdated'], ['asc']);
}
}
観察者が変更されたときに観察者が同期して更新されるため、 '会話の並べ替え 'は'会話の追加'の前に記録されます。あなたのコンポーネントは再レンダリングされませんか?あなたは '@ observer'でそれを飾ったことがありますか? – Tholle
答えはありませんが、 'addConversation'を' action'として設定すると、ログが '正しい'順番で表示されます( '会話の追加'、 '会話の並べ替え') – Komo
Tholleの答え、 1.アイテムがコレクションに追加されます。2.そのために計算されたアイテムが更新されます。 3.「追加された会話」が記録されます。別の見方をすると、ソートされた会話を最初のログステートメントに記録すると、計算結果がすぐに更新されるため、正しい出力が表示されます。 (他の多くのフレームワークとは異なり、一時的に古いデータを残す) – mweststrate