用mobx构建大型项目的最佳实践(2)

上一篇:

用mobx构建大型项目的最佳实践javascript

有朋友在读了上篇文章以后,但愿我能出个demo。因而我作了一个简单的项目来实践上文中所讲到的理念。css

仓库地址

mobx-best-practice-example前端

下面简要介绍一下项目结构及开发流程,以帮助各位同窗更好的理解项目。java

目录结构

项目根目录为 ./src(可经过package.json内的basePath配置) 页面目录为 pages, 跨页面通用业务组件目录为 components。两个目录仅仅业务含义不一样,但storeaction的组织方式一致。node

pages目录为例(components下的组件同理)react

|--pages
      |--aPage
            |--index.tsx
            |--index.scss
            |--aComponet
                  |--index.tsx
                  |--index.scss
            |--actions
                  |--nameaAction.ts
                  |--namebAction.ts
            |--stores
                  |--nameaStore.ts
                  |--namebStore.ts
    |--components
        同pages结构
复制代码

store或者action的所在页面名称和文件名称暗示了组件内获取对应实例的路径
如 在组件文件index.tsx里,git

@inject(({rootStore, rootAction}) => {
    return {
        storeA: rootStore.aPage.nameaStore,
        actionA: rootAction.aPage.nameaAction
    }
})
class AComponent extends React.Component{
    
}
复制代码

实现上述功能的核心代码在mobx目录内。github

  • 一、mStoremAction装饰器收集须要注册的storeactionclass
  • 二、provider根据收集到的storeaction按照页面划分结构,并注入到根组件中。
  • 三、各级子组件经过 mobx-react提供的inject来获取须要的storeaction
  • 四、actionstore按需实例化,action实例化时会传入当前页面的storeaction,也能够经过第三、4个参数拿到rootStorerootAction
  • 借助zone.js确保store的方法调用只能限制在action

脚手架

添加前端页面或者组件

node tools/add-page.js [page-path] 
-m   建立mobx相关文件 xxStore,xxAction
-c   建立通用组件,全部文件会生成到components目录下,其余没区别
更多命令经过 node tools/add-page.js -h 查看
# 如
node tools/add-page.js home -m
node tools/add-page.js home/aComponent -m  //建立页面内的组件
复制代码

删除前端页面目录或者组件目录

node tools/rm-page.js [page-path] 
# 如
node tools/rm-page.js home
node tools/rm-page.js home/aComponent
复制代码

以上两个命令除了生成或者删除对应文件,还会更新mobxDependence.js文件对全部storeaction文件的引用. 若是是手动添加删除,须要手动去引入或删除对应storeaction文件的引用。json

类型声明

在用脚手架建立或删除组件时,均会更新typings/index.d.ts,以便得到更好的代码提示。ide

ts transformer plugin

所在目录 ./transformer

能够发现组件里storeaction的装饰器并未显式的指定自己的访问路径(固然也能够手动指定),这正是这个ts插件所发挥的做用,经过store(action)所在的目录和文件名暗示store(action)rootStore(rootAction)的访问路径。

最后

欢迎star,pr,有什么问题也能够提issue

相关文章
相关标签/搜索