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

栏目: JavaScript · 发布时间: 5年前

内容简介:有朋友在读了上篇文章之后,希望我能出个

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

有朋友在读了上篇文章之后,希望我能出个 demo 。于是我做了一个简单的项目来实践上文中所讲到的理念。

仓库地址

mobx-best-practice-example

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

目录结构

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

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

|--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 里,

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

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

  • 1、 mStoremAction 装饰器收集需要注册的 storeactionclass
  • 2、 provider 根据收集到的 storeaction 按照页面划分结构,并注入到根组件中。
  • 3、各级子组件通过 mobx-react 提供的 inject 来获取需要的 storeaction
  • 4、 actionstore 按需实例化, action 实例化时会传入当前页面的 storeaction ,也可以通过第3、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 文件的引用。

类型声明

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

ts transformer plugin

所在目录 ./transformer

可以发现组件里 storeaction 的装饰器并未显式的指定本身的访问路径(当然也可以手动指定),这正是这个 ts 插件所发挥的作用,通过 store(action) 所在的目录和文件名暗示 store(action)rootStore ( rootAction )的访问路径。

最后

欢迎star,pr,有什么问题也可以提issue。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业头条

创业头条

[美]兰德尔•莱恩(Randall Lane)及《福布斯》杂志编辑部 / 孙莹莹 / 浙江人民出版社 / 2015-6 / 54.90

[内容简介] 全民创业的浪潮中,如何抓住共享经济带来的机遇?没有营收模式还一直烧钱的公司,如何赢得投资人的青睐?一轮死、二轮死、N轮死的魔咒下,怎样才能成功活下来?面对数十亿美元的收购要约,创始人究竟应该如何抉择?没有资金又不懂技术,是否就无法分享互联网创业的红利?《创业头条》一书将为你揭秘上述问题的答案。 阅读《创业头条》一书你会发现,在硅谷最新崛起的互联网亿万富豪身上,有这样一......一起来看看 《创业头条》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具