React Hooks

react hook

什么是Effect Hooks?

替代原來(lái)的生命周期函數(shù)

hooks可以反復(fù)多次使用,給每一個(gè)副作用一個(gè)單獨(dú)的useEffect鉤子。這

這樣,副作用不會(huì)堆在生命周期鉤子里,代碼更加清晰。

useEffect怎么用

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });

注意:

每次渲染都會(huì)調(diào)用一遍傳給useEffect的函數(shù)

useEffect中定義的副作用函數(shù)的執(zhí)行不會(huì)阻礙瀏覽器更新視圖,也就是說(shuō)這些函數(shù)是異步執(zhí)行的,而之前的componentDidMount或componentDidUpdate中的代碼則是同步執(zhí)行的。

useEffect怎么解綁

當(dāng)我們?cè)赾omponentDidMount里添加了一個(gè)注冊(cè),我們得馬上在componentWillUnmount中,也就是組件被注銷之前清除掉我們添加的注冊(cè),否則內(nèi)存泄漏的問(wèn)題就出現(xiàn)了。

怎么清除呢?讓我們傳給useEffect的副作用函數(shù)返回一個(gè)新的函數(shù)即可。這個(gè)新的函數(shù)將會(huì)在組件下一次重新渲染之后執(zhí)行。這種模式在一些pubsub模式的實(shí)現(xiàn)中很常見??聪旅娴睦樱?/p>

import { useState, useEffect } from 'react';

function FriendStatus(props) {
  const [isOnline, setIsOnline] = useState(null);

  function handleStatusChange(status) {
    setIsOnline(status.isOnline);
  }

  useEffect(() => {
    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
    // 一定注意下這個(gè)順序:告訴react在下次重新渲染組件之后,同時(shí)是下次調(diào)用ChatAPI.subscribeToFriendStatus之前執(zhí)行cleanup
    return function cleanup() {
      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
    };
  });

  if (isOnline === null) {
    return 'Loading...';
  }
  return isOnline ? 'Online' : 'Offline';
}

這里有一個(gè)點(diǎn)需要重視!這種解綁的模式跟componentWillUnmount不一樣。componentWillUnmount只會(huì)在組件被銷毀前執(zhí)行一次而已,而useEffect里的函數(shù),每次組件渲染后都會(huì)執(zhí)行一遍,包括副作用函數(shù)返回的這個(gè)清理函數(shù)也會(huì)重新執(zhí)行一遍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • React是現(xiàn)在最流行的前端框架之一,它的輕量化,組件化,單向數(shù)據(jù)流等特性把前端引入了一個(gè)新的高度,現(xiàn)在它又引入的...
    老鼠AI大米_Java全棧閱讀 5,859評(píng)論 0 26
  • 你還在為該使用無(wú)狀態(tài)組件(Function)還是有狀態(tài)組件(Class)而煩惱嗎?——擁有了hooks,你再也不需...
    米亞流年閱讀 970評(píng)論 0 5
  • 你還在為該使用無(wú)狀態(tài)組件(Function)還是有狀態(tài)組件(Class)而煩惱嗎?——擁有了hooks,你再也不需...
    水落斜陽(yáng)閱讀 82,477評(píng)論 11 100
  • 原文鏈接:https://www.v2ex.com/t/570176#reply10 React Hooks 是什...
    勿忘巛心安閱讀 1,445評(píng)論 0 3
  • 擁有了hooks,你再也不需要寫Class了,你的所有組件都將是Functionclass版 使用hook后 組件...
    zlb123456閱讀 325評(píng)論 0 0

友情鏈接更多精彩內(nèi)容