Gathering detailed insights and metrics for @36node/template-cra-redux
Gathering detailed insights and metrics for @36node/template-cra-redux
npm install @36node/template-cra-redux
Typescript
Module System
Node Version
NPM Version
Love this project? Help keep it running — sponsor us today! 🚀
Total Downloads
70,311
Last Day
20
Last Week
149
Last Month
1,153
Last Year
8,669
Latest Version
0.15.44
Package Id
@36node/template-cra-redux@0.15.44
Unpacked Size
226.89 kB
Size
137.52 kB
File Count
62
NPM Version
lerna/3.16.4/node@v10.24.1+x64 (linux)
Node Version
10.24.1
Cumulative downloads
Total Downloads
Last Day
-44.4%
20
Compared to previous day
Last Week
-47.2%
149
Compared to previous week
Last Month
-17.9%
1,153
Compared to previous month
Last Year
-43%
8,669
Compared to previous year
20
yarn install
yarn start
yarn build
git checkout -b my-new-feature
git commit -am 'Add some feature'
git push origin my-new-feature
需要在 circle-ci 配置的环境变量有
DOCKER_USER: docker hub 用户名 DOCKER_PASS: docker hub 密码 DOCKER_REGISTRY: docker hub 地址
Tpl-react-redux has integrated json-server into webpack-dev-server for testing your app, you can generate mock data and config mock server through mock.js under root path.
To disable mock, set REACT_AAP_DISABLE_MOCK=true
in .env file
1const faker = require("faker"); 2module.exports = { 3 /** 4 * Generate mock data 5 */ 6 mockFn: () => { 7 const data = { pets: [] }; 8 const tags = ["CAT", "DOG", "RABBIT"]; 9 10 for (let i = 0; i < 100; i++) { 11 data.pets.push({ 12 id: i, 13 name: faker.name.lastName(), 14 tag: tags[faker.random.number(2)], 15 }); 16 } 17 18 return data; 19 }, 20 /** 21 * Config mock server 22 */ 23 serverOpts: () => ({ 24 delay: 2000, // delay to responses (ms) [number] 25 }), 26};
note: 这段写起来难度有点大,先用中文写
1yarn styleguide
会打开 styleguide 界面,专门用于组件开发
在Redux
的参与下,我们需要把组件分成两种类型:
由于 React-Router v4 版本一直主推动态路由,所以框架中也不再使用静态路由的文件routes.js
,把路由也当做UI
的一部分。
同时也不再需要 layout 目录,layout 成为无状态组件。
默认引入的重要技术栈, 在用这个框架之前需要仔细阅读这些技术相对应的文档。
1src 2├── actions 3├── components 4├── containers 5│ ├── history 6│ ├── monitor 7│ └── vehicle 8├── lib 9├── reducers 10├── sagas 11├── sdk 12├── selectors 13├── app.js 14├── config.js 15├── constants.js 16├── history.js 17└── index.js
说是最佳实践,也不一定的,只是这么多项目做下来后形成的一个共识,然后目前其实也还有收到很多建议,有好的建议也可以建立一个 issue 来讨论。 现在这个结构可能是当下工程最合适。
工程目录结构分类大体上有两种模式。
目前为了追求代码的极致简约,采用了第二种分类模式。为了让大家更好的组织代码,分别介绍一下各个目录的用途和理念。
ps: 个人认为或许融合1和2是框架下一个版本的发展方向
这里面存放的是 Redux Action 的 creator,调用对应的函数就会生成一个 Action 声明。Action 就像一个契约,贯穿着整个系统,各个部分都会根据契约来执行对应的代码。 为了避免同一个文件过于膨胀,建议将 actions 按业务逻辑进行分类。
1index.js ## 对各个部分进行索引,统一输出 2history.js ## 历史查询 3monitor.js ## 监控部分 4vehicle.js ## 车辆详情 5global.js ## 公共的 action
这里存放各个无状态组件, 每个组件一个文件夹。组件内包含
无状态对一个组件来说是十分重要的,如果确实存在一些行为只在组件内部起作用,可以考虑做成非受控组件,或者用 uncontrollable 组件来包装。
这里存放都是有状态的组件,或者叫视图。 可以是一个页面,或者一个页面中的一部分。建议尽量切割的细一些,不用害怕数据交互。咱们这个模式最擅长做的就是数据交互。 视图中只有数据和根据数据展示的逻辑,并不应该包含副作用,以及副作用的处理。 例如 异步操作、api 等待等、 csv 文件导出、声音播放这些都可以放到 saga 中,如果在组件中,会遇到不可描述的坑,例如声音可能会二重放。
目录按照视图的业务逻辑来区分,一个业务逻辑一个目录
1history ## 历史查询 2monitor ## 监控部分 3vehicle ## 车辆详情 4equipment ## 终端管理
每个 container 文件不要太长,太长意味着咱们可以拆分它了。container
往往会引用 actions
和 selectors
文件。
公共的函数库,纯函数,纯纯的,不要放其它东西,尽量和业务逻辑无关。
Redux 的心脏部分,为数据流动提供动力。这个目录是整个架构最核心,也最能体现高度抽象的地方。
1src/reducers 2├── entity.js 3├── fetching.js 4├── form.js 5├── index.js 6├── paginate.js 7├── select.js 8├── setting.js 9└── toggle.js
index.js 是 reducer root,所有的 reducer 最终在这里汇合。
其它文件往往是 reducer 的 creator,抽象程度比较高,也方便去引用其它现成的 reducer 组件,例如 redux-form。
对应 store 里的 state,会发现我们是按分类进行组织的,和上述的 reducer 目录类似
1session ## 会话 2entities ## 实际数据存放位置 3paginators ## 分页 4fetchings ## 不分页 5selectings ## 选择器 6toggles ## 开关
新增加的 reducer 也应该按照这个逻辑组织。 一个 state
叶子节点往往和某个 action
相关,所以这里推荐之间用 action.type
作为 key
来存储。
这里存放所有的副作用以及副作用发生器。
和 reducer
的逻辑类似,这里 index.js
是根,其它文件是按分类抽象的 saga creator
代码。
这个目录是自动根据 openapi.yaml
生成的,带语法提示,支持 ts 的编辑器都会有自动的语法提示。
这里面存放的是纯函数,每个 selector 封装了从 store 中获取数据的方法和业务逻辑。 为了避免同一个文件过于膨胀,按业务逻辑进行分类。
1index.js ## 对各个部分进行索引,统一输出 2history.js ## 历史查询 3monitor.js ## 监控部分 4vehicle.js ## 车辆详情 5global.js ## 公共的 selectors
layout
在这里constants 文件中存放必要的全局常量,例如 action type 以及 state 节点等。放常量的一个好处是,可以全局重命名,第二是防止冲突,不会存在随便使用 string 的情况。 可以根据类别对常量进行分类,例如:
1export const MONITOR = { 2 LIST_VEHICLES: "MONITOR_LIST_VEHICLES", 3};
constants 建议按照业务模块进行区域划分,可以用注释符号等区分不同业务所使用的常量。
只要不重复,名称尽量短。
翻译等文字应该放在 i18n 类似的文件里。
** 前方高能,注意安全 **
修改 .env 文件里的几个 BASE
路径为线上地址
1REACT_APP_STORE_BASE=https://api.36node.com/petstore/v0
通过 Docker 镜像部署时,添加环境变量
1REACT_APP_STORE_BASE=https://api.36node.com/petstore/v0
将覆盖编译时的 REACT_APP_STORE_BASE 配置。
template-react-redux © 36node, Released under the MIT License.
Authored and maintained by 36node with help from contributors (list).
github.com/zzswang · GitHub @36node
No vulnerabilities found.
No security vulnerabilities found.