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

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

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

用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。


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

查看所有标签

猜你喜欢:

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

Uberland

Uberland

Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00

Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具