Closed chenbin92 closed 4 years ago
「更多的是贴合业务的,由业务中衍生出来的 Hooks」,这些可能要抽象出来看一下有哪些。
- 不用 react-use 的主要原因是 react-use hook 太多了,但我觉得多不是问题,用 ice/hooks 的话除了比 react-use 精简,还有其他优势吗?
- 「icejs 默认支持了按需加载,只会打包引用过的 Hooks」这个要看一下。。。
除了精简, 更多的是希望提供业务场景的 Hooks,设想的是 @ice/hooks
= react-use 高频使用的 hooks
+ 业务场景的 hooks
这个是计划需要支持的能力
「更多的是贴合业务的,由业务中衍生出来的 Hooks」,这些可能要抽象出来看一下有哪些。
上面补充了,这块需要结合业务的场景具体抽象,目前想到的是中后台常见的比如表格,表单,列表,搜索这些。比如下面 Fusion Design Pro 模板的一个界面进行分析,可以抽象 useSearch、useProfile、useForm、useTable 之类的,本质上就是将业务逻辑(数据请求、loading 状态、分页、排序等)从组件里面抽象出来。
组件 = UI 视图+ Hooks 逻辑
如果提供 import { useXxx } from 'ice'
的方式,那物料里需要用这些 hooks 怎么搞?走 react-use ?
// 方案 1:项目和物料不一致
import { useInterval, helpers: { cookie } } from 'ice';
import { useInterval } from '@ice/hooks';
import { cookie } from '@ice/helpers';
// 方案 2:项目和物料一致
import { useInterval } from '@ice/hooks';
import { cookie } from '@ice/helpers';
// 方案 3:项目和物料一致
import { useInterval } from 'react-use';
import { cookie } from '@ice/helpers';
梳理一下目前理解的物料(主要指 Fusion 区块),如果使用 @ice/hooks、@ice/helpers、@ice/store、@ice/request 的可能性,以及结合项目使用的流程是怎样的
物料只依赖 @alifd/next,看了下目前 36 个区块是没有一个有依赖第三方库的,都是 peerDependencies 依赖 @alifd/next。
假设物料除了依赖 @alifd/next,还有可能依赖 @ice/hooks、@ice/helpers,@ice/request,@ice/store。
问题一:以此类推,在物料里会使用到 @ice/hooks、@ice/helpers、@ice/request、@ice/store 吗
从目前的区块来设计来看,是基本不会用到的,但是不会用到不代表设计时可以不考虑。
问题二:那在什么场景下可以在物料里使用到上述库或者其他依赖,界限是什么?
一个合格或者好的区块,首先需要定义清楚这个「区块使用的宿主环境是什么」,因为区块本质是代码片段,是需要下载到宿主环境里然后还能正常工作的,并不是所有的区块在任何地方都能使用。
从目前的区块设计来看,宿主环境是只要能正常运行 @alifd/next 的即可。因此目前的区块只是 peerDependencies 依赖 @alifd/next。
反之推演,如果一个区块需要依赖 @ice/hooks、@ice/helpers、@ice/request、@ice/stote 那是否意味者当前区块的宿主环境就是 icejs,那么这个界限就很清楚了。
考虑「物料 + 项目」组合的场景,除了目前的 helpers 和 hooks,可能还存在的问题有 request 和 store。
基于此,是否能提供一套「基于 icejs 宿主环境提供配套的物料」。
与 icejs 配套,不考虑大而全的通用场景,可提供 「UI + State」 和 「UI + Data Model」两种方式的区块
蚂蚁这边沉淀了一些 hooks:https://github.com/umijs/hooks
目前已经在蚂蚁中台推广开来。希望可以共建 hooks 库,这样阿里集团共用一份,对开发者和用户都比较方便。
当然,共建具体事宜可以再行商量~
期待😘~
蚂蚁这边沉淀了一些 hooks:https://github.com/umijs/hooks
目前已经在蚂蚁中台推广开来。希望可以共建 hooks 库,这样阿里集团共用一份,对开发者和用户都比较方便。
当然,共建具体事宜可以再行商量~
@brickspert
之前也确实有考虑直接使用 umi/hooks,对社区用户会比较友好以及避免不必要的重复建设,主要是看到其中有一些 hooks 耦合了 antd 组件,所以就放弃了。
如果有机会可以共建我个人是非常乐意的,之前设想的大致思路如下,具体怎么共建可以约个时间对下。
蚂蚁这边沉淀了一些 hooks:https://github.com/umijs/hooks 目前已经在蚂蚁中台推广开来。希望可以共建 hooks 库,这样阿里集团共用一份,对开发者和用户都比较方便。 当然,共建具体事宜可以再行商量~
@brickspert
之前也确实有考虑直接使用 umi/hooks,对社区用户会比较友好以及避免不必要的重复建设,主要是看到其中有一些 hooks 耦合了 antd 组件,所以就放弃了。
如果有机会可以共建我个人是非常乐意的,之前设想的大致思路如下,具体怎么共建可以约个时间对下。
- 基础通用的 hooks :类似 react-use 的定位,提供通用的 hooks(不耦合组件库)。
- 业务场景的 hooks :基于 antd 组件或者 Fusion 组件进行业务场景的封装(可耦合组件库)。
嗯嗯,共建是最好的。我先出个初步的共建方案。❤️
结论:共建 ahooks 库
需求背景
React 的组件化开发特性给前端开发带来了新的开发体验,我们可以将一个页面分解成很多个组件,最后通过组件进行拼装组成完整的 UI 界面,以及组件可以很方便的在不同页面不同项目进行复用。
但是,随着业务功能复杂度的提高,组件大多数时候会和业务逻辑,生命周期函数等耦合到一起,导致很多重复的业务逻辑代码很难被抽离出来,为了快速开发很多时候我们经常是一把梭哈的复制粘贴,当业务代码逻辑发生变化时,我们又一把梭哈的同时修改多个地方,开发效率和可维护性可想而知,很多通用的逻辑也难以得到复用,如:
为了解决业务 逻辑复用的问题,React 官方也提供了相关方案如
React.mixin
、HOC
、Render Props
等,但这些方案都各有利弊,如 Render Props 的嵌套问题,Hoc 的调试和 Ref 丢失问题,一直没有真正的解决好逻辑复用的问题。类组件的不足:
直到 2019 年 React 最重磅的新特性
React Hooks
的出现,才得以真正解决逻辑复用的问题,在写法上更是颠覆。Hooks 的优势:
提案
定位
@ice/hooks:面向中后台业务场景的 Hooks 方案。
使用
默认推荐从 ice 包进行导出
分类
一期主要分为如下几类:
实现
@ice/hooks
包,提供 Hooks 的实现(可单独使用)build-plugin-ice-hooks
包,默认内置到 icejs 中,提供从 icejs 包导出的方式进行使用FAQ
为什么不直接使用 react-use ?
react-use 提供了很多优秀的 Hooks,但是大部分在实际业务中可能使用不到,而 icejs 中提供的 Hooks 一方面是基于 react-use 的基础 Hooks,另一方面更多的是贴合业务的,由业务中衍生出来的 Hooks。
更新迭代机制是怎样的 ?
第一个问题其实已经回答,
@ice/hooks
会基于社区已有的 react-use 进行合理刷选复用一部分基础的 Hooks,另外一部分是根据我们日常的业务进行抽象和沉淀到@ice/hooks
中。能不能单独使用 ?
可以单独使用
打包策略是怎样的 ?
参考
其他