成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hooks是什么?為啥Vue和React都選擇了它?

開發 前端
復雜的組件難以理解 Hooks允許您根據相關部分(例如設置訂閱或獲取數據)將一個組件分割成更小的函數,而不是強制基于生命周期方法進行分割。

Hooks是什么

"hooks" 直譯是 “鉤子”,它并不僅是 react,甚至不僅是前端界的專用術語,而是整個行業所熟知的用語。通常指:系統運行到某一時期時,會調用被注冊到該時機的回調函數。

為啥要用Hooks

  • 跨組件復用stateful logic十分困難 使用Hooks,你可以在將含有state的邏輯從組件中抽象出來,這將可以讓這些邏輯容易被測試。同時,Hooks可以幫助你在不重寫組件結構的情況下復用這些邏輯。
  • 復雜的組件難以理解 Hooks允許您根據相關部分(例如設置訂閱或獲取數據)將一個組件分割成更小的函數,而不是強制基于生命周期方法進行分割。
  • 不止是用戶,機器也對Classes難以理解 Hooks讓你可以在classes之外使用更多React的新特性。

Hooks的優點

更好的狀態復用

假設有如下需求:

當組件實例創建時,需要創建一個 state 屬性:name,并隨機給此 name 屬性賦值一個初始值。除此之外,還得提供一個 setName 方法。你可以在組件其他地方開銷和修改此狀態屬性。

更重要的是: 這個邏輯要可以復用,在各種業務組件里復用這個邏輯。

在擁有 Hooks 之前,我首先會想到的解決方案一定是 mixin。

代碼如下:(此示例采用 vue2 mixin 寫法 )。

// 混入文件:name-mixin.js
export default {
data() {
return {
name: genRandomName() // 假如它能生成隨機的名字
}
},
methods: {
setName(name) {
this.name = name
}
}
}
// 組件:my-component.vue
<template>
<div>{{ name }}</div>
<template>
<script>
import nameMixin from './name-mixin';
export default {
mixins: [nameMixin],
// 通過mixins, 你可以直接獲得 nameMixin 中所定義的狀態、方法、生命周期中的事件等
mounted() {
setTimeout(() => {
this.setName('Tom')
}, 3000)
}
}
<script>

雖然看起來好像是可以復用的,但是React官方出來說話了。

既然被斃了,肯定是有它的原因的,雖然是可以實現復用,但是顯露的弊端也是非常的明顯的。

方法和屬性難以監聽

export default {
mixins: [ a, b, c, d, e, f, g ], // 當然,這只是表示它混入了很多能力
mounted() {
console.log(this.name)
// mmp!這個 this.name 來自于誰?我難道要一個個混入看實現?
}
}

屬性、方法會覆蓋

當我同時想混入 mixin-a.js 和 mixin-b.js 以同時獲得它們的屬性或者方法的時候,比較尷尬的事情發生了:由于這兩個 mixin 功能的開發者心有靈犀,它們都定義了 this.name 作為屬性。這種時候,這個時候的你就會傻傻分不清。

代碼結構

這就是為啥Vue3尤大大使用CompostionAPI的原因了。

這樣帶來的好處是顯而易見的:“高度聚合,可閱讀性提升”。伴隨而來的便是 “效率提升,bug變少”。

趨勢

2019年年初,react 在 16.8.x 版本正式具備了 hooks 能力。2019年6月,尤雨溪在 vue/github-issues 里提出了關于 vue3 Component API 的提案。(vue hooks的基礎)在后續的 react 和 vue3 相關版本中,相關 hooks 能力都開始被更多人所接受。除此之外,solid.js、 preact 等框架,也是開始選擇加入 hooks 大家庭。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2024-02-05 21:48:25

VueReactHooks

2022-06-06 17:36:11

物聯網顛覆物聯網

2019-03-13 10:10:26

React組件前端

2019-04-19 11:56:48

框架AI開發

2022-08-21 09:41:42

ReactVue3前端

2020-11-02 13:25:45

Redis數據庫開源

2022-02-11 13:44:56

fiber架構React

2022-09-23 10:25:00

VueReact

2019-08-20 15:16:26

Reacthooks前端

2022-08-09 13:22:26

Hooksreactvue

2018-11-06 21:30:44

jQuery前端API

2021-07-13 07:52:03

ReactHooks組件

2019-04-09 09:22:32

Redis內存緩存

2021-03-18 08:00:55

組件Hooks React

2021-01-20 14:25:53

Vue3CSS前端

2021-12-14 07:40:07

企業內部開源

2021-08-23 13:25:25

Vue3CSS前端

2019-04-29 10:21:58

JSONXML前端

2025-03-10 07:10:00

2019-07-05 10:53:55

ReactVue前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品福利 | 日韩精品一区中文字幕 | 青青久在线视频 | 日韩欧美在线播放 | 色黄网站 | 精品国产精品国产偷麻豆 | 成人精品免费视频 | 在线精品一区 | 色综合久久天天综合网 | 麻豆国产一区二区三区四区 | 日日操夜夜操天天操 | 国产九九九九 | 成人一区二区三区在线观看 | 久久久精品一区 | 国产成人精品久久二区二区91 | 草草草久久久 | 插插插干干干 | 日本又色又爽又黄又高潮 | 久草视频观看 | 亚洲国产伊人 | 91在线视频观看 | 青娱乐自拍 | 中文二区 | 亚洲经典一区 | 欧美成年网站 | 久久精品亚洲欧美日韩久久 | 在线观看国产www | 免费视频久久 | 丁香婷婷久久久综合精品国产 | 久久在线 | 成人免费毛片在线观看 | 欧美自拍日韩 | 成人在线观看网址 | 拍拍无遮挡人做人爱视频免费观看 | 欧美在线国产精品 | 综合网视频 | 中文字幕国产精品 | 97avcc| 国产精品一区二区三区在线 | 超碰在线97国产 | 亚洲国产成人精品一区二区 |