react Hooks

useEffectjavascript

一、useEffect是didMount和didUpdate和willUnmount三個函數的集合java

二、useEffec(fun):fun會在每次組件render以後執行,而fun中return的cleanup會在willUnmount中執行react

三、useEffect(fun,[xxx])第二個參數用於訂閱哪一個props修改後執行,能夠利用此優化函數

 

 

自定義hook優化

一、以 「use」 開頭的函數,函數內部能夠調用其餘的 Hookcode

二、Hook 是一種複用狀態邏輯的機制,因此每次使用自定義 Hook 時,其中的全部 state 和反作用都是徹底隔離的。只是處理state的邏輯同樣blog

// useFriendStatus

import React, { useState, useEffect } from 'react';

function useFriendStatus(friendID) {
  const [isOnline, setIsOnline] = useState(null);

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
    };
  });

  return isOnline;
}


function FriendStatus(props) {
  const isOnline = useFriendStatus(props.friend.id);

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

function FriendListItem(props) {
  const isOnline = useFriendStatus(props.friend.id);

  return (
    <li style={{ color: isOnline ? 'green' : 'black' }}>
      {props.friend.name}
    </li>
  );
}
相關文章
相關標籤/搜索