toJS()が監視可能なオブジェクトに適用されたときに空のオブジェクトを返すのはなぜですか?-MobX

uneet7

監視可能なオブジェクトでtoJS()を実行すると、空のオブジェクトが取得されます。Object.assign()observableObjectを使用してAPI呼び出し後に値を割り当てています今、私はこれを使用しています計算され、次のコードに示すように、異なる店舗の方法。observableObject

class Store {
    @observable observableObject = {};

    Fetch(){
        .....
        APIcall()
        .then((response) => {
            Object.assign(this.observableObject, response.data);
        }).catch(...)
    }
    .....
}

class Store2 {

    @computed get computedValue(){

        // return an non empty {Symbol(mobx administration): ObservableObjectAdministration$$1} object
        console.log(this.rootStore.store1.observableObject);

        // returns True
        console.log(isObservable(this.rootStore.store1.observableObject));

        // return an empty object
        console.log(toJS(this.rootStore.store1.observableObject));

    }
}

この問題について言及しましたが、助けが見つかりませんでした。observableObject以下のログを見つけてください誰もが予想外のbheviour説明できtoJS()mobxでは。

編集:プロキシmobx observableのログのターゲットフィールドにはすべてのフィールドが含まれていますが、toJS()変換では空のオブジェクトが生成されます。これがサンドボックスのデモです

mobx Object.assign + toJSを編集します

observableObjectのクロムログ

リッチチャーチャー

これは、APIの応答を十分に待つという問題です。CodeSandboxでは、MobXが何かを更新するのを待たずに、API呼び出しが戻るとすぐにスクリプトが終了します。運が良ければ、コンソール出力を見るのに十分な速さで終了するかもしれませんが、おそらくそうではありません。

秘訣は、APIを待ってからストアを更新し、そこから計算値を読み取ることです。

import { observable, toJS, runInAction, computed } from "mobx";
import axios from "axios";

class Store {
  @observable observableObject = {};
}

const store = new Store();

class Store2 {
  @computed get computedVar() {
    return toJS(store.observableObject);
  }
}

const store2 = new Store2();
console.log("Object before API call:", store2.computedVar);

axios
  .get("https://jsonplaceholder.typicode.com/todos/1")
  .then(response => {
    runInAction(() => {
      Object.assign(store.observableObject, response.data);
    });
  })
  .then(() => {
    console.log("Object after API call:", store2.computedVar);
  })
  .catch(console.error);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトがMobxの監視可能な配列にあるかどうかを確認する方法は?

分類Dev

MobXはJavaScriptオブジェクト/参照を監視します

分類Dev

MobXでクラスオブジェクトを監視可能にするにはどうすればよいですか?

分類Dev

オブジェクトのプロパティが更新された後、オブジェクトのMobX配列が再レンダリングされない

分類Dev

mobxオブジェクトからプレーンオブジェクトを取得するにはどうすればよいですか?

分類Dev

Mobx:オブジェクトを観察するための反応が機能しない

分類Dev

コンポーネントを反応させるための小道具としてmobxの観測可能なオブジェクトを渡すのは安全ですか?

分類Dev

MobX:observable.map()からのオブジェクトへの参照

分類Dev

MobXストアでネストされたオブジェクトを追跡する方法

分類Dev

mobxで@computedオブジェクトをサブスクライブするにはどうすればよいですか?

分類Dev

mobx-react-formオブジェクトを小道具として渡す

分類Dev

オブジェクトプロパティ内のMobxオブジェクトにアクセスできません

分類Dev

オブジェクトを破棄する前にアップロードリクエストをキャンセルすると、mobx-state-treeがスローされます[デッド]エラーを変更できません

分類Dev

出力が必要なときにwebpackが空のオブジェクトを返すのはなぜですか?

分類Dev

CrudRepository.save()が作成されたオブジェクトを返すときにFetchType.EAGERを無視するのはなぜですか?

分類Dev

監視可能なコレクションが正しい数のオブジェクトを返すのに、オブジェクトが空であるのはなぜですか?

分類Dev

状態が変更されたときにmapStateToPropsが空のオブジェクトを返すのはなぜですか?

分類Dev

監視可能なオブジェクトが新しいスレッドとして実行されたときにオブザーバーに通知されないのはなぜですか?

分類Dev

監視可能なオブジェクトが変更されたときに通知を投稿する方法

分類Dev

react / mobx内のオブジェクトのレンダリングリスト

分類Dev

javafx:オブジェクト自体が監視可能リストから削除されたときに、オブジェクトのバックグラウンドタスクの実行を停止するにはどうすればよいですか?

分類Dev

このreactコンポーネントがmobxオブザーバーで更新されないのはなぜですか

分類Dev

2つの異なるストリームに書き込まれた単一のオブジェクトが、読み返されたときに2つの異なるオブジェクトを表すのはなぜですか?

分類Dev

2回リストされたときにオブジェクトが消えたのはなぜですか?

分類Dev

Mobxは監視可能な配列のクラスを監視しません

分類Dev

MobX-fromPromiseを使用してストアコンストラクターで約束された観測可能な値は、別のストアでアクセスされたときにnullのままですか?

分類Dev

オブジェクトのMobX配列でのディープオートラン

分類Dev

マップにオブジェクトを割り当てると空のオブジェクトが生成されるのはなぜですか?

分類Dev

getBluetoothLeAdvertiserがオブジェクトを返すときに、isMultipleAdvertisementSupported()がfalseを返すのはなぜですか?

Related 関連記事

  1. 1

    オブジェクトがMobxの監視可能な配列にあるかどうかを確認する方法は?

  2. 2

    MobXはJavaScriptオブジェクト/参照を監視します

  3. 3

    MobXでクラスオブジェクトを監視可能にするにはどうすればよいですか?

  4. 4

    オブジェクトのプロパティが更新された後、オブジェクトのMobX配列が再レンダリングされない

  5. 5

    mobxオブジェクトからプレーンオブジェクトを取得するにはどうすればよいですか?

  6. 6

    Mobx:オブジェクトを観察するための反応が機能しない

  7. 7

    コンポーネントを反応させるための小道具としてmobxの観測可能なオブジェクトを渡すのは安全ですか?

  8. 8

    MobX:observable.map()からのオブジェクトへの参照

  9. 9

    MobXストアでネストされたオブジェクトを追跡する方法

  10. 10

    mobxで@computedオブジェクトをサブスクライブするにはどうすればよいですか?

  11. 11

    mobx-react-formオブジェクトを小道具として渡す

  12. 12

    オブジェクトプロパティ内のMobxオブジェクトにアクセスできません

  13. 13

    オブジェクトを破棄する前にアップロードリクエストをキャンセルすると、mobx-state-treeがスローされます[デッド]エラーを変更できません

  14. 14

    出力が必要なときにwebpackが空のオブジェクトを返すのはなぜですか?

  15. 15

    CrudRepository.save()が作成されたオブジェクトを返すときにFetchType.EAGERを無視するのはなぜですか?

  16. 16

    監視可能なコレクションが正しい数のオブジェクトを返すのに、オブジェクトが空であるのはなぜですか?

  17. 17

    状態が変更されたときにmapStateToPropsが空のオブジェクトを返すのはなぜですか?

  18. 18

    監視可能なオブジェクトが新しいスレッドとして実行されたときにオブザーバーに通知されないのはなぜですか?

  19. 19

    監視可能なオブジェクトが変更されたときに通知を投稿する方法

  20. 20

    react / mobx内のオブジェクトのレンダリングリスト

  21. 21

    javafx:オブジェクト自体が監視可能リストから削除されたときに、オブジェクトのバックグラウンドタスクの実行を停止するにはどうすればよいですか?

  22. 22

    このreactコンポーネントがmobxオブザーバーで更新されないのはなぜですか

  23. 23

    2つの異なるストリームに書き込まれた単一のオブジェクトが、読み返されたときに2つの異なるオブジェクトを表すのはなぜですか?

  24. 24

    2回リストされたときにオブジェクトが消えたのはなぜですか?

  25. 25

    Mobxは監視可能な配列のクラスを監視しません

  26. 26

    MobX-fromPromiseを使用してストアコンストラクターで約束された観測可能な値は、別のストアでアクセスされたときにnullのままですか?

  27. 27

    オブジェクトのMobX配列でのディープオートラン

  28. 28

    マップにオブジェクトを割り当てると空のオブジェクトが生成されるのはなぜですか?

  29. 29

    getBluetoothLeAdvertiserがオブジェクトを返すときに、isMultipleAdvertisementSupported()がfalseを返すのはなぜですか?

ホットタグ

アーカイブ