React Hooks

目录

1. 出发:问题是什么?

2. 如何设计组件(使用react的正确姿势与步骤)?

第一步:分析页面结构,划分组件层级

第二步:用 React 创建一个静态版本

 第三步:确定 UI state 的最小(且完整)表示

如何正确使用 useState ?

何时使用 useReducer?

 第四步:确定 state 放置的位置

如何注意React性能问题? 

第五步:添加反向数据流

何时使用 useContext?

何时使用redux?

3. 总结

如何正确使用 useState ?

何时使用 useRecuder ?

如何注意React性能问题?

何时使用 useContext?

何时使用 redux

4. 写在最后 


1. 出发:问题是什么?

  1. 如何正确使用 useState?
  2. 什么时候使用 useReducer?
  3. 书写时如何注意react性能问题?
  4. 什么时候使用 useContext?
  5. 什么时候使用 redux?

2. 如何设计组件(使用react的正确姿势与步骤)?

我们将根据 官方文档 中 react 哲学 所描述的步骤进行逐步分析,完整文档请移步 React 哲学 – React

第一步:分析页面结构,划分组件层级

当我们拿到一个页面的需求时,我们首先要分析这个页面,将这个页面通过图解拆分成不同的组件,而拆分组件的原则react哲学中也提到过:

你可以将组件当作一种函数或者是对象来考虑,根据单一功能原则来判定组件的范围。也就是说,一个组件原则上只能负责一个功能。如果它需要负责更多的功能,这时候就应该考虑将它拆分成更小的组件

 对于拆分组件的细节,react哲学中有完整的过程和示例,这里不多做赘述,请移步官方文档。

为了引出接下来的问题,这里简单模拟一个组件拆分,以做后续分析使用,具体请根据项目业务分析

 页面组件层级分别是:

  • 一级:MyPage 是当前页面最外层的根组件
  • 二级:Form input 是一部分可以输入和选择的部分
  • 二级:Main Content 是页面下方主要显示的内容
  • 三级:Tab1 Content 是 main 中的其中一个tab
  • 三级:Tab2 Content (暂时忽略)
  • 四级:Tab1-content_left  
  • 四级:Tab1-content_right  
  • 五级:Tab1-content_right_top
  • 五级:Tab1-content_rigjt_bottom

第二步:用 React 创建一个静态版本

React哲学中注明的第二个步骤是指当我们确认页面组件结构之后,可以开始书写组件,渲染静态页面,但这里只是静态页面,不涉及交互,更不需要引入 State,对此React文档中也有解释

在构建应用的静态版本时,我们需要创建一些会重用其他组件的组件,然后通过 props 传入所需的数据。props 是父组件向子组件传递数据的方式。即使你已经熟悉了 state 的概念,也完全不应该使用 state 构建静态版本。state 代表了随时间会产生变化的数据,应当仅在实现交互时使用。所以构建应用的静态版本时,你不会用到它。 

 第三步:确定 UI state 的最小(且完整)表示

当我们书写完静态版本之后,需要分析每个组件需要用到的状态以及需要进行的交互,这里涉及到如何定义State,也就是第一个问题:如何正确使用 useState?对此,react哲学中给出了解决方案:

为了正确地构建应用,你首先需要找出应用所需的 state 的最小表示,并根据需要计算出其他所有数据。其中的关键正是 DRY: Don’t Repeat Yourself。只保留应用所需的可变 state 的最小集合,其他数据均由它们计算产生。比如,你要编写一个任务清单应用,你只需要保存一个包含所有事项的数组,而无需额外保存一个单独的 state 变量(用于存储任务个数)。当你需要展示任务个数时,只需要利用该数组的 length 属性即可。

通过问自己以下三个问题,你可以逐个检查相应数据是否属于 state:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值