【发布时间】:2020-03-30 00:29:25
【问题描述】:
我一直在试图了解取消订阅(useEffect 中的回调)何时被准确调用。
这是 codepen 链接:https://codepen.io/deen_john/pen/eYmNdMy 代码:
const { useState, useEffect } = React ;
function App() {
const [count, setCount] = useState(0);
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
// Update the document title using the browser API
document.title = `You clicked ${count} times`;
console.log("use effect called ");
return () => {
console.log("unsubscribe ")
}
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
ReactDOM.render(<App />, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
问题: 在我的示例中,useEffect 挂钩(即取消订阅)中的回调函数在我每次单击按钮时被调用(即每次我更新按钮状态时)。 但是,根据 React 文档, useEffect 中的回调的工作方式类似于 componentWillUnmount 生命周期,因此在我的示例中,只有在卸载 App 组件时才应该调用它。 我只是在这里更新按钮状态,而不是每次点击都卸载 App 组件。
【问题讨论】:
-
它将在下一次渲染之前被调用
-
这里是冠军本人的解释..overreacted.io/a-complete-guide-to-useeffect
标签: reactjs react-hooks