3

React と MobX を組み合わせて使用​​しています。監視可能な配列 (会話) を持つストアを使用しており、この配列の並べ替えられたバージョンを計算されたプロパティとして提供したいと考えています。新しい会話を追加すると、計算されたプロパティ sortedConversations が評価されてから、会話が配列に追加されます。以下の小さな例では、「会話の並べ替え」は常に「追加された会話」の前に記録されます。私は何か間違ったことをしていますか?

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']);
    }
}
4

1 に答える 1

1

あなたは何も悪いことをしていません。MobX API は通常の JavaScript のように見えますが、オブザーバブルが更新されるたびに、内部ですべてのオブザーバーが同期的に更新されます。この場合、これは問題になりませんがaddConversationトランザクションの内容をラップできます。

addConversation(conversation) {
  transaction(() => {
    this.conversations.push(conversation);
    console.log('Added conversation');
  });
}

addConversationを であるアクションにすることもできますtransaction:

@action
addConversation(conversation) {
  this.conversations.push(conversation);
  console.log('Added conversation');
}
于 2016-08-26T15:12:33.507 に答える