在React中使用MobX
MobX 提供了一个 mobx-react 包帮助开发者方便地在 React 中使用 MobX。我们在前面已经多次使用的 observer/@observer 就来自这个包。下面介绍 mobx-react 中另外两个常用 API。
- Provider
-
Provider 是一个 React 组件,利用 React 的 context 机制把应用所需的 state 传递给子组件。它的作用与 react-redux 提供的 Provider 组件是相同的。
- inject
-
inject 是一个高阶组件,它和 Provider 结合使用,用于从 Provider 提供的 state 中选取所需数据,作为 props 传递给目标组件。常用方式有如下两种:
inject("store1", "store2")(observer(MyComponent))
@inject("store1", "store2") @observer MyComponent
一个简单示例:
import React, { component } from "react";
import ReactDOM from "react-dom";
import { observer, inject, Provider } from "mobx-react"
import { observable } from "mobx"
@observer
@inject("store")
class App extends Component {
render() {
const { store } = this.props;
return (
<div>
<ul>
{store.map(todo => <TodoView todo={todo} key={todo.id} />)}
</ul>
</div>
);
}
}
const TodoView = observer(({todo}) => {
return <li>{todo.title}</li>
});
// 构造store及其初始数据
const todos = observable([]);
todos.push({id: 1, title : "Task1"});
todos.push({id: 2, title : "Task2"});
ReactDOM.render(
{/* Provider向 context 中注入 store 对象 */}
<Provider store={todos}>
<App />
</Provider>,
document.getElementById("root")
);