javascript - 如何使 useEffect 对 props 的反应与 ComponentDidUpdate 一样快?
问题描述
在以下情况下,当 isLoading 属性更新时,rotateLogo() 会立即触发:
class Logo extends Component {
constructor(props) {
super(props);
};
}
componentDidUpdate() {
if (this.props.isLoading) {
this.rotateLogo();
}
}
...
但是,当尝试在具有 useEffect 的功能组件中实现相同的功能时,isLoading 的更新和 rotateLogo() 的激活之间存在相当大的延迟
const Logo = ({ isLoading }) => {
useEffect(() => {
if (isLoading) {
rotateLogo();
}
}, [isLoading])
...
解决方案
在这种情况下,您可能希望同步重新渲染,因此您应该使用useLayoutEffect
而不是useEffect
:https ://reactjs.org/docs/hooks-reference.html#uselayouteffect
推荐阅读
- google-apps-script - 按名称搜索 google drive 文件并获取其 ID
- excel - 添加过滤器时,基于其他列的自动填充列值失败
- machine-learning - 高斯朴素贝叶斯是否有参数需要调整
- angular - 如果使用 ngIf 隐藏字段,如何从角度反应形式切换(添加/删除)表单控件?
- c++ - 链表中双指针的使用
- react-spring - 如何在单个组件上附加多个反应弹簧?
- c - c语言中的面试题reg二进制位操作
- docker - 如何从 docker-compose 或 docker run 写入现有的填充卷
- javascript - 根据日期从数据库中获取唯一值,当用户单击日期时,然后展开数据库中可用的详细信息
- javascript - 如何通过同一行的另一列的一个文本框中的输入获取值