只須要了解經常使用的4個api, 就能深刻理解React Hooks

Hooks的出現,想必你們有所瞭解。若是你是一個Hooks新手,想用Hooks去構造你的應用程序。不要心急,你只須要跟着我一塊兒學習hooks,半個小時你就能掌握React Hooks,並用Hooks去重構你的項目html

  • 首先咱們要了解Hooks的API
  • 吃透經常使用的四種API
  • 自定義Hooks
  • 比較好用的Hooks庫
  • 其餘的API和有價值的文檔

首先咱們要了解Hooks的API

  1. 基礎API
    • useState
    • useEffect
    • useContext
  2. 其餘的API
    • useReducer
    • useCallback
    • useMemo
    • useRef
    • useImperativeMethods
    • useLayoutEffect

吃透經常使用的四種

  • useState
  • useEffect
  • useCallback
  • useRef

useState

const [state, setState] = useState(initialState);
複製代碼

在初始渲染的時候,返回的狀態( state )與做爲第一個參數( initialState )傳遞的值相同。react

setState 函數用於更新 state(狀態) 。它接受一個新的 state(狀態) 值,並將組件排入從新渲染的隊列。git

useEffect

const id = props;
const [value, setValue] = useState(1)
useEffect(() => {
    dosomething();
},[id, value]);
複製代碼

useEffect 這個反作用函數在react全生命週期中扮演着很重要的角色,與 componentDidMount 和 componentDidUpdate 不一樣,傳遞給 useEffect 的函數在延遲事件期間在 layout(佈局) 和 paint(繪製) 後觸發。咱們也能夠把useEffect看做是生命週期函數的一個集合,以前在生命週期中didMount,didUpdate,WillReceiveProps,WillUnmount均可以將函數做爲第一個參數dosomething在useEffect執行。
第一個參數爲函數dosomething(),第二個參數爲一個數組,數組裏面的id和value只要有一個改變都會執行dosomething()。github

useCallback

useEffect(() => {
    getDeviceSituation(projectId);
}, [getDeviceSituation, projectId]);

const getDeviceSituation = useCallback((id) => {
  dispatch({
    type: 'runTimeCenter/getDeviceSituation',
    payload: {
      projectId: id,
    },
  });
}, [dispatch]);

const onClickTag = () => {
    getDeviceSituation(projectId);
 };
 return (
    <div onclick = {onClickTag}></div>
 )
複製代碼
  1. useEffect裏面要執行外部封裝的方法時,外部封裝的方法必須要用useCallback包裹一層,第二個參數爲對該狀態值的監聽。
  2. useCallback返回的是一個函數,該函數中有對狀態值的監聽,實際上能夠理解成一個有函數返回值的useEffect。

useRef

兩種用途
react-native

  1. DOM操做(與render props 用法相似),useRef 返回一個可變的 ref 對象,其 .current 屬性被初始化爲傳遞的參數(initialValue)。返回的對象將存留在整個組件的生命週期中。
function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}
複製代碼

2.實例化字段,方便保留任何可變值數組

const string = useRef('aaa');
複製代碼

自定義Hooks

function useInputValue(initialValue) {
  const [value, setValue] = useState(initialValue);
  const onChange = (event) =>  {
    setValue(event.currentTarget.value);
  };

  return {
    value,
    onChange
  };
}
function Demo(props){
   const name = useInputValue('sss') 
    return (
        <input {...name} />
    ) 
}

複製代碼

是否是感受代碼很清爽,這樣我就能夠將全部的組件Hooks化,說白了自定義Hooks,也就是自定義組件。bash

比較好用的Hooks庫

  1. ESlint插件 react-hooks 規則
  2. react 自定義hooks庫
  3. react native 自定義hooks組件庫

其餘的API和有價值的文檔

另外五種API可去官網查看其用法,這裏我就不介紹了。
ide

Hooks 原著者Dan useEffect 完整指南函數

相關文章
相關標籤/搜索