最近、反応とmobx反応ライブラリでmobxを使い始めました。Mobx - 反応:一緒に注入して観察する
機能的な反応コンポーネントを使用してビューを作成したいと考えています。
セレクタ関数とComponentを引数とし、inject(パラメータとしてセレクタ関数を使用)を呼び出し、そのコンポーネントを監視して、このコンポーネントをmobx-reactストアに効果的に接続するヘルパー関数を作成したいと思います。 )、このコンポーネントに必要なプロパティのみを提供します。
しかし、私はそれを働かせることはできません。アクションはディスパッチされていますが、ビューはこの変更に反応しません(ストア属性は変更されますが、コンポーネントはこの変更に反応しません)。
ここimport { observer, inject } from 'mobx-react';
export function connect(selectorFunction, component) {
return inject(selectorFunction)(observer(component));
}
は私のコンポーネントです:
import React from 'react';
import { connect } from 'utils';
const selector = (stores) => {
return {
counter: stores.counterStore.counter,
double: stores.counterStore.double,
increment: stores.counterStore.increment
};
};
const Counter = ({ counter, double, increment }) => {
return (
<div className="counter">
<p>{ counter }</p>
<p className="double">{ double }</p>
<button onClick={increment}>+1</button>
</div>
);
};
export default connect(selector, Counter);
、ここで私の店です:
は、ここに私のヘルパー関数です
import { observable, computed, action } from 'mobx';
export default class Counter {
@observable counter = 0;
@action
increment =() => {
this.counter++;
}
@computed
get double() {
return this.counter * 2;
}
}
(示していないプロバイダや他の単純なもの、それ適切に設定されている)。
ありがとうございます!すべての答えは非常に高く評価されています。
ありがとう!これは私が知りませんでした他のいくつかの問題を解決したかもしれませんが、私の以前の問題はまだ続きます:) –
うーん、それは変です。あなたのコードを(私のコンピュータ上でローカルに)使用し、あなたが記述した問題に気付きました。これに更新した後、それは私のために適切に働いた。あなたは解決策を見つけることを願っています! – tobiasandersen
現在の動作の背後にある理由は、 'observer'コンポーネントの' render'メソッドだけが追跡され、注入関数自体は追跡されないということです。実際には面白いかもしれません...楽しみのために、これがあなたの元の問題を解決するかどうかを試すことができます: 'return observer(inject(selectorFunction)(observer(component)))' も参照してください:https:// github。 co.jp/mobxjs/mobx-react/issues/111 – mweststrate