為什么要使用React Hooks?(5分鐘實例)

前言

React Hooks在React v16.8正式穩定版中加入。

Hooks是什么?

  1. React Hooks 就是讓你不必寫class組件就可以用state和其他的React特性;
  2. 你也可以編寫自己的hooks在不同的組件之間復用;

最近很多人都在談論 React Hooks。當使用React類組件那么久,使用React hooks需要一些觀念轉變。React官方團隊明確表示他們將會據需支持類組件,那為什么還要使用React Hooks呢?

接下來是一個5分鐘的例子將你帶入hooks,讓我們一起了解吧。

例子

我們的例子是 一個按鈕帶有是否激活狀態,當點擊的時候切換顏色。

開始

我們有一個簡單的按鈕組件,我們想讓他變的簡單,所以寫了一個功能函數:

const Button = props => {return (<div className="button" onClick={props.onClick} >{props.text}</div>)
}
復制代碼

我們可以傳遞自定義的 onClick 事件 和 text屬性。

但是,如果我們想要當按鈕激活改變其顏色要怎么辦? 假如,我們已經有100個組件用了這個按鈕,我們不想再加其他屬性,顏色屬性讓按鈕自己控制也足夠簡單。

轉換到類

唯一的問題是我們將會需要一些狀態。假設現在在hooks出現之前,我們只能將其轉換成class,才能控制state。

class ButtonWithClass extends React.Component {state = {active: false};render() {return (<div className={this.state.active ? "active-button" : "default-button"}>onClick={() => { this.setState({active: !this.state.active}); this.props.onClick();}}>{this.props.text}</div>)}
}
復制代碼

我們有一個完全重寫的組件,加了2倍的代碼行,我們想要的只是一點狀態。你的代 碼 PR 校驗人會看到很多紅色和綠色的git修改明細。沒有人會喜歡圣誕主題的紅綠色Pull Request。

Hooks將會拯救你!

添加Hooks

當我們用React Hooks執行完全相同的操作時會發生什么:

    import React, {useState} from 'react';const ButtonWithHooks = props => {const [active, setActive] = useState(false); // ***return (<div className={active ? "active-button" : "default-button"} //*onClick={() => {setActive(!active); // ***props.onClick();}}>{props.text}</div>)};
復制代碼

這個組件,我們沒有重寫任何東西。我們做的就是添加了一點行數 并更新了 onCLick 函數,我們得到了與class版本相同的結果。我們的PR 查看者會開心,添加state只需下面這一行: const [active setActive] = useState(fasle);

重構

但是等等,為什么按鈕控制自己的狀態?我們改變下,我們想讓那個組件簡單讓我們看起來聰明。 我們讓 active 變成一個被父組件控制的prop。沒問題,用React Hooks 僅移處帶**的兩行 和 帶號的那一行的一部分。

如此簡單,但是class裝換成function會更復雜。

當你把組件裝換成函數時,你可能很受挫。查看你代碼的人又變成另外一個紅綠色。即使實際的變化很小你將會感到很沮喪。

總結

React Hooks 讓你的功能函數作為一個函數,并掛鉤到React 特定功能。這就是他,如此簡單如此強大。這是React Hooks的一些好處(大多數已經覆蓋到了,我只想分享我認為收益最明顯的地方)

  1. 重寫不用移處或添加state,僅刪除、添加行
  2. 用useEffects不用記生命周期方法
  3. 不像class組件的state可自定義和跨組件重用。
  4. 更干凈的代碼
  5. 沒有重大變化

blog.usejournal.com/why-bother-…

轉載于:https://juejin.im/post/5cfdba4be51d4577596486d1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279414.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ActiveMQ在windows下啟動失敗解決方案

activemq.xml文件中的<transportConnectors><!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name"openwire" uri"tcp://0.0.0.0:61616?maximumConnections1000&amp;wireForma…

jest忽略如何添加忽略_大多數人忽略的基本家庭維護任務

jest忽略如何添加忽略Owning a home requires a lot of responsibility, most notably regular maintenance to keep everything working great. However, there are a handful of very basic home maintenance tasks that you might be forgetting about. 擁有房屋需要承擔很多…

自定義常用input表單元素二:純css實現自定義radio單選按鈕

這是接著上一篇純css自定義復選框checkbox的第二篇&#xff0c;自定義一個radio單選按鈕&#xff0c;同樣&#xff0c;采用css偽類和“”css選擇器為思路&#xff0c;下面是預覽圖&#xff1a; 下面直入主題放代碼&#xff1a;HTML部分 <!--兩個name相同的radio--> <i…

Elasticsearch之kopf插件安裝之后的瀏覽詳解

比如&#xff0c;我的這里是http://192.168.80.200:9200/_plugin/kopf/ 1、cluster 2、nodes 3、rest 4、more 5、更多詳情&#xff0c;隨著深入&#xff0c;再貼寫分享&#xff01; 本文轉自大數據躺過的坑博客園博客&#xff0c;原文鏈接&#xff1a;http://www.cnblogs.com/…

郵件系統之webmail

courier-authlib 網址http://www.courier-mta.org/ flush privileges 命令本質上的作用是將當前user和privilige表中的用戶信息/權限設置從mysql庫(MySQL數據庫的內置庫)中提取到內存里 虛擬用戶&#xff1a;Maildir &#xff1a;/var/mailbox/Suexec apache ,httpdusergroupht…

如何將Microsoft Word文檔轉換為PDF

PDFs are handy for distributing documents so that they’re seen the same way by all parties. Typically, you’ll create documents using another app, and then convert them to PDF. Here’s how to do it for a Microsoft Word document. PDF易于分發文檔&#xff0c…

ASP.NET WebApi 基于JWT實現Token簽名認證

一、前言 開發提供數據的WebApi服務&#xff0c;最重要的是數據的安全性。那么對于我們來說&#xff0c;如何確保數據的安全將會是需要思考的問題。在ASP.NET WebService服務中可以通過SoapHead驗證機制來實現&#xff0c;那么在ASP.NET WebApi中我們應該如何保證我們的接口安全…

Cage驗證碼生成器快速上手

Cage小巧&#xff0c;好用。這里在官方基礎例子基礎上做了擴展&#xff1a; 12345678910111213141516171819202122232425262728293031323334package com.lavasoft.ntv.web.common; import com.github.cage.IGenerator; import java.util.Random; /*** 驗證碼生成器 * * author …

馬云:未來無工可打,人工智能發展紅利還在10年以后

馬云雖然已經退出阿里巴巴&#xff0c;但作為一代商業傳奇他所說的話&#xff0c;還十分據有影響力。關于人工智能&#xff0c;馬云提出過不少預測性言論。未來10年&#xff0c;房子、車子都不在值錢。面對人工智能時代&#xff0c;未來傳統行業大部分會消失。更有厲害的&#…

如何更改您的iPhone鈴聲

The problem with having a popular phone like an iPhone is that, by default, everyone has the same ringtone. If you want to give your iPhone a more personal sound, here’s how to do it. 擁有像iPhone這樣的流行手機的問題是&#xff0c;默認情況下&#xff0c;每個…

【ACM-ICPC 2018 沈陽賽區網絡預賽 I】Lattice's basics in digital electronics

【鏈接】 我是鏈接,點我呀:) 【題意】 【題解】 每個單詞的前綴都不同。 不能更明示了... 裸的字典樹。 模擬一下。輸出一下就ojbk了。 【代碼】 #include <bits/stdc.h> #define LL long long #define rep1(i,a,b) for (int i a;i < b;i) #define rep2(i,a,b) for…

扒一扒那些年我們遇到的奇葩代碼

前言 本文首發于公眾號【一名打字員】 在工作中&#xff0c;我們通常會遇到傳說中的“祖傳”代碼&#xff0c;有些是否讓我們感到哭笑不得&#xff0c;今天本猿整理一下自己以及網絡上出現過的奇葩代碼。來源于互聯網的均會標明出處。 TOP1 當仁不讓的當然是傳說中的“睡排序”…

相對濕度與絕對濕度_如何監視家里的濕度水平

相對濕度與絕對濕度High humidity is no fun, and neither is low humidity—you want a good balance between the two. Here’s how to monitor the humidity in your house so that you can make the proper adjustments. 高濕度無濟于事&#xff0c;低濕度也無濟于事-您希望…

基于redis實現的扣減庫存

2019獨角獸企業重金招聘Python工程師標準>>> 在日常開發中有很多地方都有類似扣減庫存的操作&#xff0c;比如電商系統中的商品庫存&#xff0c;抽獎系統中的獎品庫存等。 解決方案 使用mysql數據庫&#xff0c;使用一個字段來存儲庫存&#xff0c;每次扣減庫存去更…

JavaScript 使用random()生成隨機數

function myFunction() { var a Math.floor(Math.random()*10);return a;} // 記住 Math.random() 永遠不會返回 1。同時因為我們是在用 Math.floor() 向下取整&#xff0c;所以最終我們獲得的結果不可能有 20。這確保了我們獲得了一個在0到19之間的整數。 把操作連綴起來&…

plex 亂碼_Plex Media Center現在支持播客

plex 亂碼Plex is adding beta support for podcasts to iOS, Android, Roku, and Plex Web today, alongside a custom home screen for mobile users. Plex現在為iOS&#xff0c;Android&#xff0c;Roku和Plex Web的播客添加了beta支持&#xff0c;同時為移動用戶提供了自定…

Add a All Document Folder

本文出自Simmy的個人blog&#xff1a;西米在線 http://simmyonline.com/archives/54.html right clickSearch Folder-New Search Folder-Custom-Create a custom folder 本文轉simmy51CTO博客&#xff0c;原文鏈接&#xff1a;http://blog.51cto.com/helpdesk/122327&#xff0…

Oracle服務器修改IP后

機房有兩套網絡&#xff0c;一套辦公網&#xff0c;一套機房的內網&#xff0c;辦公網可以通過vpn在其他地方訪問&#xff0c;內網只能在公司辦公室訪問。團隊有同事去外地辦公&#xff0c;開發的時候需要通過客戶端直連數據庫&#xff0c;于是把數據庫服務器的網線換到辦公網的…

代理IP對直播平臺的影響與關系-國內多IP曇花一現

1.代理IP的作用1>.訪問一些單位或團體內部資源&#xff0c;如某大學FTP(前提是該代理地址在該資源 的允許訪問范圍之內)&#xff0c;使用網絡內地址段免費代理服務器&#xff0c;就可以用于對 網絡開放的各類FTP下載上傳&#xff0c;以及各類資料查詢共享等服務。國內站群整…

ios12徹底關閉siri_Siri正在iOS 12中獲取自定義語音操作

ios12徹底關閉siriSiri is about to get a lot more powerful. Custom voice commands for any app will allow you to say “Hey Siri, I lost my keys” to instantly launch an app that will help you find them. Siri將變得更加強大。 針對任何應用程序的自定義語音命令將…