用mobx构建大型项目的最佳实践javascript
有朋友在读了上篇文章以后,但愿我能出个demo
。因而我作了一个简单的项目来实践上文中所讲到的理念。css
下面简要介绍一下项目结构及开发流程,以帮助各位同窗更好的理解项目。java
项目根目录为 ./src
(可经过package.json
内的basePath
配置) 页面目录为 pages
, 跨页面通用业务组件目录为 components
。两个目录仅仅业务含义不一样,但store
和action
的组织方式一致。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
mStore
和mAction
装饰器收集须要注册的store
和action
的class
provider
根据收集到的store
和action
按照页面划分结构,并注入到根组件中。mobx-react
提供的inject
来获取须要的store
和action
action
和store
按需实例化,action
实例化时会传入当前页面的store
和action
,也能够经过第三、4个参数拿到rootStore
和rootAction
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
文件对全部store
和action
文件的引用. 若是是手动添加删除,须要手动去引入或删除对应store
和action
文件的引用。json
在用脚手架建立或删除组件时,均会更新typings/index.d.ts
,以便得到更好的代码提示。ide
所在目录 ./transformer
能够发现组件里store
和action
的装饰器并未显式的指定自己的访问路径(固然也能够手动指定),这正是这个ts
插件所发挥的做用,经过store(action)
所在的目录和文件名暗示store(action)
在rootStore
(rootAction
)的访问路径。
欢迎star
,pr
,有什么问题也能够提issue
。