Reactjs 更新后的useEffect本地状态行为

Reactjs 更新后的useEffect本地状态行为,reactjs,react-hooks,Reactjs,React Hooks,在这个示例中,我们将介绍自定义挂钩 import React, { useState, useEffect } from 'react'; function useFriendStatus(friendID) { const [isOnline, setIsOnline] = useState(null); useEffect(() => { function handleStatusChange(status) { setIsOnline(status.i

在这个示例中,我们将介绍自定义挂钩

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;
}
我们假设这个
Foo
组件调用了它

function Foo(props) {
  const [state, setState] = useState({...});
  ...
  useFriendStatus(friendID)
  ...
}
当调用
handleStatusChange
并且
useffect
本地状态
isOnline
更改时,会发生什么

Foo
组件将或多或少立即呈现(我知道setState()是异步的),还是将等待其自身的
状态或
道具更新

据我所知,只有在调用它的组件被呈现时才会调用自定义钩子,还是我错了

当调用handleStatusChange并且useEffect本地状态为Online更改时,会发生什么

Foo组件是会立即呈现(我知道setState()是异步的),还是会等到自己的状态或道具得到更新

设置状态是导致react组件重新启动的原因。只要调用setIsOnline,组件的状态就已经更新,并且它或多或少会立即重新启动

据我所知,只有在调用它的组件被呈现时才会调用自定义钩子,还是我错了

自定义钩子很方便:它们让您可以重用代码,或者只是让代码更具可读性。但他们不会改变react所知道的。React只知道您调用了
useState
useffect
,然后调用了
setIsOnline
。它不知道该代码是内联编写的还是提取到帮助器方法中的


如果React在呈现时看到对useState的调用,它将设置一个状态变量和一个setter函数。如果您调用setter函数,它将重新加载组件。

我知道了,但如果您想更改某些内容,我会更新我的第一个问题