Mobx - React:一起注入和观察
Mobx - React: Inject and Observe together
最近我开始将 mobx 与 react 和 mobx-react 库一起使用。
我想使用功能性 React 组件来创建我的视图。
我想创建一个辅助函数,它接受选择器函数和组件,调用注入(使用选择器函数作为参数)并观察该组件 - 有效地将此组件连接到 mobx-react 存储(取自 Provider context) 并仅为该组件提供所需的属性。
但我无法让它工作。正在调度操作,但视图不会对此更改做出反应(存储属性确实发生更改,但组件不会对此更改做出反应)。
这是我的辅助函数:
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;
}
}
(没有显示 Provider 和其他简单的东西,但设置正确)。
谢谢!非常感谢每个答案。
查看 Mobx 的 documentation,您的选择器似乎做错了。它应该return一个具有商店的对象,并且不是具有来自商店的值的对象。尝试 returning 实际的 counterStore
代替:
const selector = (stores) => {
return {
counterStore: stores.counterStore
};
};
并在您的组件中像这样使用它:
const Counter = ({ counterStore: { counter, double, increment } }) => {
return (
<div className="counter">
<p>{ counter }</p>
<p className="double">{ double }</p>
<button onClick={increment}>+1</button>
</div>
);
};
最近我开始将 mobx 与 react 和 mobx-react 库一起使用。
我想使用功能性 React 组件来创建我的视图。
我想创建一个辅助函数,它接受选择器函数和组件,调用注入(使用选择器函数作为参数)并观察该组件 - 有效地将此组件连接到 mobx-react 存储(取自 Provider context) 并仅为该组件提供所需的属性。
但我无法让它工作。正在调度操作,但视图不会对此更改做出反应(存储属性确实发生更改,但组件不会对此更改做出反应)。
这是我的辅助函数:
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;
}
}
(没有显示 Provider 和其他简单的东西,但设置正确)。
谢谢!非常感谢每个答案。
查看 Mobx 的 documentation,您的选择器似乎做错了。它应该return一个具有商店的对象,并且不是具有来自商店的值的对象。尝试 returning 实际的 counterStore
代替:
const selector = (stores) => {
return {
counterStore: stores.counterStore
};
};
并在您的组件中像这样使用它:
const Counter = ({ counterStore: { counter, double, increment } }) => {
return (
<div className="counter">
<p>{ counter }</p>
<p className="double">{ double }</p>
<button onClick={increment}>+1</button>
</div>
);
};