3.2 代码组织
熵减,宇宙哲学到编码哲学 。项目、模块、页面、功能,如何高效而清晰地组织代码,这一个看似简单的命题就算写几本书也无法完全说清楚 。
但一个页面中,N件事情的代码在一个组件内互相纠缠确实是在 Hooks 出现之前非常常见的一种状态 。
那么 Hooks 写法在代码组织上究竟能带来怎样的提升呢?
文章插图
(假设上图中每一种颜色就代码一种高度相关的业务逻辑)
无论是 vue 还是 react, 通过 Hooks 写法都能做到,将“分散在各种声明周期里的代码块”,通过 Hooks 的方式将相关的内容聚合到一起 。
这样带来的好处是显而易见的:“高度聚合,可阅读性提升” 。伴随而来的便是 “效率提升,bug变少” 。
按照“物理学”里的理论来说,这种代码组织方式,就算是“熵减”了 。
3.3 比 class 组件更容易理解
尤其是 this 。在 react 的 class 写法中,随处可见各种各样的 .bind(this) 。(甚至官方文档里也有专门的章节描述了“为什么绑定是必要的?”这一问题)
vue 玩家别笑,computed: { a: () => { this } } 里的 this 也是 undefined 。
很显然,绑定虽然“必要”,但并不是“优点”,反而是“故障高发”地段 。
但在Hooks 写法中,你就完全不必担心 this 的问题了 。
因为:
本来无一物,何处惹尘埃 。Hooks 写法直接告别了 this,从“函数”来,到“函数”去 。
妈妈再也不用担心我忘记写 bind 了 。
3.4 友好的渐进式
随风潜入夜,润物细无声 。渐进式的含义是:你可以一点点深入使用 。
无论是 vue 还是 react,都只是提供了 Hooks API,并将它们的优劣利弊摆在了那里 。并没有通过无法接受的 break change 来强迫你必须使用 Hooks 去改写之前的 class 组件 。
你依然可以在项目里一边写 class 组件,一边写 Hooks 组件,在项目的演进和开发过程中,这是一件没有痛感,却悄无声息改变着一切的事情 。
但是事情发展的趋势却很明显,越来越多的人加入了 Hooks 和 组合式API 的大军 。
四、如何开始玩 hooks ?
4.1 环境和版本
在 react 项目中, react 的版本需要高于 16.8.0 。
而在 vue 项目中, vue3.x 是最好的选择,但 vue2.6+ 配合 @vue/composition-api,也可以开始享受“组合式API”的快乐 。
4.2 react 的 Hooks 写法
因为 react Hooks 仅支持“函数式”组件,因此需要创建一个函数式组件 my-component.js 。
// my-component.jsimport { useState, useEffect } from 'React'export default () => {// 通过 useState 可以创建一个 状态属性 和一个赋值方法const [ name, setName ] = useState('')// 通过 useEffect 可以对副作用进行处理useEffect(() => {console.log(name)}, [ name ])// 通过 useMemo 能生成一个依赖 name 的变量 messageconst message = useMemo(() => {return `hello, my name is ${name}`}, [name])return <div>{ message }</div>}
细节可参考 react 官方网站:https://react.docschina.org/docs/hooks-intro.html
4.3 vue 的 Hooks 写法
vue 的 Hooks 写法依赖于 组合式API,因此本例采用 <script setup> 来写:
<template><div>{{ message }}</div></template><script setup>import { computed, ref } from 'vue'// 定义了一个 ref 对象const name = ref('')// 定义了一个依赖 name.value 的计算属性const message = computed(() => {return `hello, my name is ${name.value}`})</script>
很明显,vue 组合式API里完成 useState 和 useMemo 相关工作的 API 并没有通过 useXxx 来命名,而是遵从了 Vue 一脉相承而来的 ref 和 computed 。
推荐阅读
- 红茶能和蜂蜜怎么泡,蜂蜜红茶利尿
- 红茶与金骏眉区别,金骏眉红茶泡法水温
- 中秋节赏月的寓意
- 红茶的冲泡过程,绿茶红茶的保健作用
- 皮影戏的表演形式和艺术特征
- 中国传统象棋和书法包括什么
- 煮红茶和泡红茶的区别,和红茶和绿茶的区别
- 动脉硬化和钙化的区别有哪些?
- 触摸屏的意义和作用是什么
- 红茶和鲜奶能起喝吗,月季花和红茶起泡茶吗