我知道useEffect
每次在渲染组件时都会运行。我目前正在集成一个VideoConference应用程序,该应用程序在初始化后创建一个名为publisher
的对象。 publisher
可以更新。例如,我可以停用视频等。
我创建了两个按钮,用于将audio
和video
的状态更改为0或1。然后将这些值传递给组件OTPublisher
。我感到困惑的部分是我是否真的应该/需要使用useEffect
?即使没有将useEffect
直接插入组件中,它也可以双向工作。
<OTPublisher
video={video}
audio={audio}
completionHandler={completionHandler}
>
OTPublisher.js
useEffect(() => {
if (publisher) {
audio ? publisher.publishAudio(true) : publisher.publishAudio(false);
video ? publisher.publishVideo(true) : publisher.publishVideo(false);
}
});
///
if (publisher) {
audio ? publisher.publishAudio(true) : publisher.publishAudio(false);
video ? publisher.publishVideo(true) : publisher.publishVideo(false);
}
答案 0 :(得分:0)
useEffect的原因是因为它具有一些额外的功能,这些功能直接在组件中产生副作用,而不会像清理那样仅在依赖项发生更改时才执行效果。
使组件主要部分保持纯净的另一个重要原因是即将到来的并发模式:https://reactjs.org/docs/concurrent-mode-intro.html
并发模式极大地改变了组件渲染的方式,一次可以启用多个重渲染。 React.StrictMode是一个组件,可设置您的组件并为每个渲染实质上渲染两次,以模拟并发模式以确保您没有问题。