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

cdarwin

MobXのobservable.map()を操作しているときに、マップ内に保存されているオブジェクトが元のオブジェクトにリンクされていないことがわかりました。

import { useStrict, configure, autorun } from 'mobx';
import { observable, action, computed } from 'mobx';


configure({ enforceActions: true });

let user = {id: 1, name: "John"};

let myMap = observable.map();
myMap.set(user.id, user);
user.name = "Bill";
console.log(myMap.get(1).name); // John is printed, I expect Bill

プレーンな動的オブジェクトと同じ動作を取得するにはどうすればよいですか?つまり、既存の参照からobservable.maps内のオブジェクトを更新する方法はありますか?

user = {id: 1, name: "John"};
let myClassicMap = {};
myClassicMap[user.id] = user;
user.name = "Bill";
console.log(myClassicMap[1].name); // Bill is printed as expected

編集

使用するobservable.map(values, { deep: false })と通常の動作になりますが、可観測性の点で何かを失ったかどうかわかりません。次の例では、自動実行はuser.nameの変更によってトリガーされませんか?

import { observable, autorun} from 'mobx';

let myMap = observable.map({}, {deep: false});
myMap.set(user.id, user);
autorun(() => console.log(myMap));
user.name = "Bill";
ジョエル・ハークス

これは、深い配列に何かを追加するたびに、中に入れたものすべてがラップされて観察可能になるためです。

let user = {id: 1, name: "John"};

let myMap = observable.map();
myMap.set(user.id, user); //here user is turned into observeable object where all curent keys are tracked

深く掘り下げない場合:{deep: false}このオブジェクトはラップ/監視可能なオブジェクトに変換されないため、行った変更は表示されますが、これらの変更は配列自体の変更に向けて追跡されません。したがって、再レンダリングはトリガーされません。

また、action()有効にしので、内部ですべてを実行するようにしてくださいconfigure({ enforceActions: true });

import { useStrict, configure, autorun } from 'mobx';
import { observable, action, computed } from 'mobx';


configure({ enforceActions: true });

let user = {id: 1, name: "John"};

let myMap = observable.map();
action(() =>{
    myMap.set(user.id, user);
    user = myMap.get(1); //here we retrieved the observable object version of user.
    user.name = "Bill";
})()
console.log(myMap.get(1).name)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

複数のObservableから単一のオブジェクトを作成する

分類Dev

Mobx Observable Mapを使用したキーを介した.map()

分類Dev

Mobx Observable Mapを使用したキーを介した.map()

分類Dev

オブジェクト参照の代わりにAngularでObservableを使用する理由

分類Dev

Mobx Observable Array

分類Dev

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

分類Dev

KnockoutJS-SQLサーバーからのデータを含むObservableオブジェクトのObservable配列

分類Dev

Observableをサブスクライブし、オブジェクトから値の配列を抽出する方法

分類Dev

mobxからobservableまたは何でもインポートしません

分類Dev

mobxの@observable修飾子と@ observable.ref修飾子の違いは何ですか?

分類Dev

孫からのオブジェクトへの参照?

分類Dev

Observableからオブジェクト値を取得する(RxJava、Retrofit)

分類Dev

RxJava:Nullableオブジェクトからobservableを作成する

分類Dev

ProgressオブジェクトからObservableを作成する

分類Dev

KO.Observableからオブジェクトを取得します

分類Dev

RxJava Kotlinは、単一のobservable <String>から分離されたオブジェクトを取得する方法

分類Dev

オブジェクトプロパティのObservableから値を取得します

分類Dev

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

分類Dev

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

分類Dev

Observableオブジェクトへのパラメーター値の受け渡し

分類Dev

Javascriptのオブジェクト内からのオブジェクトの配列への参照

分類Dev

@observableプロパティを変更しても、mobxを使用してプロジェクトのオブザーバーコンポーネントを再レンダリングしない

分類Dev

オブジェクトの配列に対するAngularRxJS Observable Filter

分類Dev

Mobx4-observable.map .keys()。values()は配列の代わりに関数を返します

分類Dev

配列のMobX @ observableをPropTypes.arrayのReactコンポーネントプロップに渡す

分類Dev

「親」オブジェクトへの参照

分類Dev

オブジェクトへの参照

分類Dev

オブジェクトへのKnockoutjsID参照

分類Dev

TypeScriptでMobx @ observableの値を適切に取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    複数のObservableから単一のオブジェクトを作成する

  2. 2

    Mobx Observable Mapを使用したキーを介した.map()

  3. 3

    Mobx Observable Mapを使用したキーを介した.map()

  4. 4

    オブジェクト参照の代わりにAngularでObservableを使用する理由

  5. 5

    Mobx Observable Array

  6. 6

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

  7. 7

    KnockoutJS-SQLサーバーからのデータを含むObservableオブジェクトのObservable配列

  8. 8

    Observableをサブスクライブし、オブジェクトから値の配列を抽出する方法

  9. 9

    mobxからobservableまたは何でもインポートしません

  10. 10

    mobxの@observable修飾子と@ observable.ref修飾子の違いは何ですか?

  11. 11

    孫からのオブジェクトへの参照?

  12. 12

    Observableからオブジェクト値を取得する(RxJava、Retrofit)

  13. 13

    RxJava:Nullableオブジェクトからobservableを作成する

  14. 14

    ProgressオブジェクトからObservableを作成する

  15. 15

    KO.Observableからオブジェクトを取得します

  16. 16

    RxJava Kotlinは、単一のobservable <String>から分離されたオブジェクトを取得する方法

  17. 17

    オブジェクトプロパティのObservableから値を取得します

  18. 18

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

  19. 19

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

  20. 20

    Observableオブジェクトへのパラメーター値の受け渡し

  21. 21

    Javascriptのオブジェクト内からのオブジェクトの配列への参照

  22. 22

    @observableプロパティを変更しても、mobxを使用してプロジェクトのオブザーバーコンポーネントを再レンダリングしない

  23. 23

    オブジェクトの配列に対するAngularRxJS Observable Filter

  24. 24

    Mobx4-observable.map .keys()。values()は配列の代わりに関数を返します

  25. 25

    配列のMobX @ observableをPropTypes.arrayのReactコンポーネントプロップに渡す

  26. 26

    「親」オブジェクトへの参照

  27. 27

    オブジェクトへの参照

  28. 28

    オブジェクトへのKnockoutjsID参照

  29. 29

    TypeScriptでMobx @ observableの値を適切に取得するにはどうすればよいですか?

ホットタグ

アーカイブ