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函数,它将重新加载组件。我知道了,但如果您想更改某些内容,我会更新我的第一个问题