爲何要使用React Hooks?(5分鐘實例)

前言

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

Hooks是什麼?

  1. React Hooks 就是讓你沒必要寫class組件就能夠用state和其餘的React特性;
  2. 你也能夠編寫本身的hooks在不一樣的組件之間複用;

最近不少人都在談論 React Hooks。當使用React類組件那麼久,使用React hooks須要一些觀念轉變。React官方團隊明確表示他們將會據需支持類組件,那爲何還要使用React Hooks呢?git

接下來是一個5分鐘的例子將你帶入hooks,讓咱們一塊兒瞭解吧。bash

例子

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

開始

咱們有一個簡單的按鈕組件,咱們想讓他變的簡單,因此寫了一個功能函數:ui

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

咱們能夠傳遞自定義的 onClick 事件 和 text屬性。this

可是,若是咱們想要當按鈕激活改變其顏色要怎麼辦? 假如,咱們已經有100個組件用了這個按鈕,咱們不想再加其餘屬性,顏色屬性讓按鈕本身控制也足夠簡單。spa

轉換到類

惟一的問題是咱們將會須要一些狀態。假設如今在hooks出現以前,咱們只能將其轉換成class,才能控制state。code

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。blog

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-…

相關文章
相關標籤/搜索