react扬帆起航之状态管理(mobx)

本文信息

  • 本文建立于2018/03/07
  • 2018/03/20 更新 -- 统一管理store

mobx简介与使用

一直以来,redux是react事实上的状态管理工具,直到mobx横空出世。今后,多了一个选择。关于mobx与redux的异同,网上有不少文章介绍,本文中再也不叙述了。本文主要介绍react与mobx搭配使用,固然,有时间我也许会写一个react与redux搭配使用的示例教程。react

做为一个功能强大的状态管理工具,mobx上手确是十分简单。咱们知道,redux强调单一数据来源,即单一store。然而,在大型应用时,单一store每每带来管理不便的问题。相对而言,mobx并不推崇单一store。咱们能够对每个路由组件构建一个store。固然,也能够构建一个全局的store,服务于全部组件。全局store与局部store是能够彻底搭配使用的。git

本文以局部store为例说明:github

// Home/Store.tsx
import { observable, action } from 'mobx';

class Store {

  // 定义数据
  @observable title: string = '';

  // 改变数据
  @action loadTitle = () => {
    this.title = 'Welcome to home page !';
  }

  // 实例化
  static init() {
    return new Store();
  }
}

export default Store;
// Home/Home.tsx
import * as React from 'react';
import { observer } from 'mobx-react';
import Store from './Store';

@observer
class Home extends React.Component<{}, {}> {

  store: any;

  componentDidMount(): void {
    this.store = Store.init();
    const { loadTitle } = this.store;
    loadTitle();
  }

  render() {
    const { title } = this.store;
    return (<p>{title}</p >);
  }

}

export default Home;

统一管理store

随着应用的增大,若是在每一个组件目录下创建对应的store,不免难以维护。所以,统一管理store是一个较好的选择。redux

在根目录下简历stores目录,做为存放store的仓库,全部的store都放在这里。segmentfault

在入口文件index.tsx:ide

// index.tsx
...
import { Provider } from 'mobx-react';
import rootStore from './stores/RootStore';
import homeStore from './stores/HomeStore';
...

const stores = {
  rootStore,
  homeStore
};

ReactDOM.render(
  <Provider {...stores}>
    <Router basename={process.env.PUBLIC_URL}>
      <App />
    </Router>
  </Provider>,
  document.getElementById('root') as HTMLElement
);

在须要使用到store的组件:工具

// /Home/index.tsx
...
import { observer, inject } from 'mobx-react';
import { HomeStore } from '../stores/HomeStore';
import { RootStore } from '../stores/RootStore';
...

interface Props {
  homeStore: HomeStore;
  rootStore: RootStore;
}

@inject('rootStore')
@inject('homeStore')
@observer
class HomeComponent extends React.Component<Props, {}> {
  ...
  render() {
    return (
      <div>
        <h1 className={styles.title}>{this.props.homeStore.title}</h1>
        <p>{this.props.rootStore.title}</p>
      </div>
    );
  }
}

这样,就完成了mobx与react的搭配使用。固然,这只是最初级的用法。mobx还有更多强大功能,想进一步了解的,能够去mobx官网查看它的文档。本文旨在介绍mobx结合react的基本用法,不作过多深刻。固然,若是服务端渲染时,如何再搭配mobx,则会复杂一些。这个,我会在后面的服务端渲染的文章中提到。学习

至此,状态管理(mobx)的内容完毕。this


react扬帆启航专栏分享的时我我的学习与实践react过程当中的一些历程,但愿借此专栏与你们共同探讨react相关的技术,以求进步。code

相关文章
相关标签/搜索