怎么写自定义的Effect Hooks?
为什么要自己去写一个Effect Hooks? 这样我们才能把可以复用的逻辑抽离出来,变成一个个可以随意插拔的“插销”,哪个组件要用来,我就插进哪个组件里,so easy!看一个完整的例子,你就明白了
比如我们可以把上面写的FriendStatus组件中判断朋友是否在线的功能抽出来,新建一个useFriendStatus的hook专门用来判断某个id是否在线。
import { useState, useEffect } from 'react';
function useFriendStatus(friendID) {
 const [isOnline, setIsOnline] = useState(null);
 function handleStatusChange(status) {
  setIsOnline(status.isOnline);
 }
 useEffect(() => {
  ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
  return () => {
   ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
  };
 });
 return isOnline;
}
这时候FriendStatus组件就可以简写为:
function FriendStatus(props) {
 const isOnline = useFriendStatus(props.friend.id);
 if (isOnline === null) {
  return 'Loading...';
 }
 return isOnline ? 'Online' : 'Offline';
}
简直Perfect!假如这个时候我们又有一个朋友列表也需要显示是否在线的信息:
function FriendListItem(props) {
 const isOnline = useFriendStatus(props.friend.id);
 return (
  <li style={{ color: isOnline ? 'green' : 'black' }}>
   {props.friend.name}
  </li>
 );
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持黑区网络。
