在https://reactjs.org/docs/hooks-custom.html 的这个react示例中,自定义钩子用于 2 个不同的组件来获取用户的在线状态......
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>
);
}
我的问题是,该函数是否会在导入组件的任何地方单独执行?或者是否有诸如在组件之间共享状态之类的东西,如果它被定义为单独的导出函数?例如,我只执行一次该函数,并且所有组件中的“isOnline”状态都相同?
如果它是单独获取的,我将如何在全局只获取一次数据,然后将其传递给我的 React 应用程序中的不同组件?