首页 > 其他分享 >思考 React Hook 和 Vue 组合式 API

思考 React Hook 和 Vue 组合式 API

时间:2023-03-29 10:33:42浏览次数:56  
标签:组合式 Vue 后续 getA 代码 React Hook API

Vue 组合式 API

优化周期函数

Vue2 比如 mounted 周期中有很多获取数据的逻辑都在这里,在 updated 周期中又有很多更新的逻辑在这里。

在老版本的 Vue3 文档中讲解组合式 API 就用到了下面类似的例子,新版本的 Vue3 文档更着重讲解组合式 API 对状态逻辑复用的好处。

选项式 API:

export default {
  data() {
    return {
      a: 1,
      b: 2,
      c: 3,
      d: 4,
      e: 5,
      f: 6
    }
  },
  mounted() {
    getA();
    // 做一些关于 getA 的后续代码
    getB();
    // 做一些关于 getA 的后续代码
    getC();
    // 做一些关于 getA 的后续代码
    getD();
    // 做一些关于 getA 的后续代码
    getE();
    // 做一些关于 getA 的后续代码
  },
  updated() {
    getA();
    // 做一些关于 getA 的后续代码
    getB();
    // 做一些关于 getA 的后续代码
    getC();
    // 做一些关于 getA 的后续代码
    getD();
    // 做一些关于 getA 的后续代码
    getE();
    // 做一些关于 getA 的后续代码
  }
}

如上代码所示,updated 和 mounted 周期中,完全不相关的代码被同一个周期组合在一起

组合式 API:

const a = ref(1);
onMounted(() => {
  getA();
  // 做一些关于 getA 的后续代码
});

const b = ref(1);
onMounted(() => {
  getB();
  // 做一些关于 getB 的后续代码
});

const c = ref(1);
onMounted(() => {
  getC();
  // 做一些关于 getC 的后续代码
});

在组合式 API 中,可以把相关的代码在位置上组合在一起,方便阅读和理解。下一节中才是诠释组合式 API 真正地好处。

抽离状态逻辑

在 Vue2 中,响应式数据、生命周期函数都在组件对象中定义(选项 API),如果要抽离一些有状态的逻辑出去,只能通过 mixins 来复用,无状态逻辑的函数可以抽离到 js 文件。

Vue 组合式 API 可以封装和复用有状态逻辑的函数,即组合式 API 可以让我们在组件外使用响应式以及其他的 Vue 特性

下面是 Vue 文档的一个例子,Vue3 组合式 API,在 mouse.js 文件中通过 ref、onMounted、onUnmounted 继续使用 Vue 的特性。周期函数可以在组件外调用,可以在组件外声明响应式数据

// mouse.js
import { ref, onMounted, onUnmounted } from 'vue'

export function useMouse() {
  const x = ref(0)
  const y = ref(0)

  function update(event) {
    x.value = event.pageX
    y.value = event.pageY
  }

  onMounted(() => window.addEventListener('mousemove', update))
  onUnmounted(() => window.removeEventListener('mousemove', update))

  return { x, y }
}

React Hook

React 以前都是在 class 中定义组件,从 React 16.8 之后的版本推荐函数定义组件。React Hook 可以让我们在函数中继续使用 state 以及其他的 React 特性。

React class 编写组件也有和 Vue2 选项式 API 差不多的问题

  1. 生命周期中不相关的代码被强行组合在一起,相关的代码被强行隔开。
  2. 在组件之间复用状态逻辑很难。

React Hook 从组件中提取状态逻辑,这些逻辑可以单独测试并复用。Hook 在无需修改组件结构的情况下复用状态逻辑。

React Hook 不需要通过 this.props.xxx 来获取状态数据,很大程度上提升编程效率和可阅读性。class 不能很好的压缩,且热重载出现不稳定的情况。

标签:组合式,Vue,后续,getA,代码,React,Hook,API
From: https://www.cnblogs.com/Himmelbleu/p/17267631.html

相关文章

  • 第十篇 vue - 基础 -事件处理
    监听事件我们可以使用v-on指令(简写为@)来监听DOM事件,并在事件触发时执行对应的JavaScript。用法:v-on:click="methodName"或@click="handler"事件处理器的值可......
  • 若依框架-Vue实用框架(权限控制和页面渲染)(四)
    Vue实用框架(权限控制和页面渲染)路由的组成前端token获取那一步中有一块内容,只是简单提了一下,但其实实际涉及到的内容很多: 用户信息的获取第一步的GetInfo后端接口不......
  • 第九篇 vue - 基础 - 列表渲染
    v-for我们可以使用v-for指令基于一个数组来渲染一个列表。v-for指令的值需要使用iteminitems形式的特殊语法,其中items是源数据的数组,而item是迭代项的别名dat......
  • 第八篇 vue - 基础 - 条件渲染
    v-ifv-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染<h1v-if="awesome">Vueisawesome!</h1>v-else你也可以使用v-else为v-i......
  • 第六篇 vue - 基础 - 计算属性
    基础示例模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象exportdefault......
  • 第五篇 vue - 基础 - 响应式基础
    声明响应式状态选用选项式API时,会用data选项来声明组件的响应式状态。此选项的值应为返回一个对象的函数Vue将在创建新组件实例的时候调用此函数,并将函数返回的对象......
  • 第七篇 vue - 基础 - 类与样式绑定
    Class与Style绑定数据绑定的一个常见需求场景是操纵元素的CSSclass列表和内联样式。因为class和style都是attribute,我们可以和其他attribute一样使用v-bind......
  • webpack构建React、TSX项目(一)
    此篇主要是记录下webpack构建react项目的过程。前言:为什么想起来通过webpack去构建react的项目呢?现在可以通过cra或者vite或其他脚手架去构建比较省事。主要还是想要了解下w......
  • Vue——initProvide【十一】
    前言前面我们简单的了解了vue初始化时的一些大概的流程,这里我们详细的了解下具体的内容;内容这一块主要围绕init.ts中的initProvide进行剖析,初始化生命周期之后紧接着......
  • vue 软键盘组件封装
    场景和需求1软键盘固定2多输入框共用一个组件,聚焦切换时操作对象自动切换3根据光标在输入框的位置进行相应的输入和删除操作4点击软键盘时保存输入框光标活跃5输......