アプリのストアの観測変数に TypeScript クラス インスタンスを含む外部ライブラリがあります。
class Store:
@observable active_obj:ExternalClass;
このインスタンスにはメソッドがあり、呼び出されると、オブジェクトをそのままにして内部状態を更新します。
store.active_obj.change()
現在、Mobx はこのオブジェクト自体もその (私が推測する) プロパティも監視していないため、フィールド active_obj で直接発生する変更のみ (それに割り当てられた新しい値など) のみです。MyClass のインスタンスは外部ライブラリによって提供され、最終的にこのライブラリのコンポーネント内でレンダリングされるため、オブザーバブルとオブザーバーをそのクラス構造にも React コンポーネントにも追加できません。これは、オブジェクトのプロパティを変更しても再レンダリングがトリガーされない理由だと思います...
変更のために観測されていないインスタンスを呼び出すと同時に、ナンセンスデータで直接変更する他の観測された変数を使用して、少しごまかす必要がありました。ツリーの上位にあるコンポーネントにこの変数への参照を追加すると、外部ライブラリの (監視されていない) コンポーネントの更新を生成する再レンダリングをトリガーできます。
私の質問は、オブザーバーに store.active_obj インスタンスを通知できるように、Mobx に変更を認識させるにはどうすればよいですか?
Mobx ドキュメントのこの部分でこれについて警告していると思いますが、回避策や解決策はありません。
** 文字列ではなくオブジェクトが like の場合、およびそれらが独自の Like コンポーネントによってレンダリングされた場合、 Likes コンポーネントは特定の like 内で発生する変更に対して再レンダリングされません。
編集
@mweststrateの質問に従って、いくつかのコンテキストを提供します:
- 私のアプリはそのデータを制御しますが、そこから外部クラスのインスタンスを作成する必要があります
- インスタンスのデータはカプセル化され、その場で変更されますが、ユーザーがトリガーしたイベントを介してアプリ側から要求することによって行われます (つまり、データがいつ更新されるかを知っています)。
- 基本的に、クラスはアプリのデータを使用して、ユーザーの選択に基づいてデータにさまざまなビューを提供し、React コンポーネントでレンダリングします
- また、この変更されたデータをアプリの別の場所で、私が制御するコンポーネントで使用します
- 変更されたデータは外部クラスの内部の一部であり、それに依存することはできません
- Mobx は見ることができるミューテーションを追跡するため、Observable を使用しても直接は機能しません。
私が考えたいくつかの可能な解決策:
- 変更を参照するインスタンスを呼び出したときに、オブザーバブルの active_object が変更されたことをオブザーバーに手動で通知します
- Mobxが追跡できるコンテナオブジェクトがあり、センチネルプロパティを変更すると、その更新が通知され、実際のインスタンスがそれを持つ