gpt4 book ai didi

reactjs - 在 useEffect() 内部使用 useDispatch() 时,操作似乎不会立即调用

转载 作者:行者123 更新时间:2023-12-03 13:40:47 25 4
gpt4 key购买 nike

我想在首次安装页面时调度一个操作。此操作立即将 loading 设置为 true,然后在 2 秒后将其设置为 false。

注意到当我使用 hooks/react 组件时它有不同的行为。当我使用 componentDidMount 将其编写在 React 组件中时,一切正常。但对于钩子(Hook) useEffect,在调用加载操作之前有 0.3 秒的时间间隔。是什么导致了这么小的时间差距? useEffect 不应该等同于 componentDidMount 吗?

运行示例

CodeSandbox

useEffect()

import React, { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";

import { load } from "./actions/user";

const Router = () => {
const dispatch = useDispatch();
useEffect(() => {
dispatch(load(true));
}, [dispatch]);
const loading = useSelector(state => state.user.loading);
if (loading) {
return <div>Loading...</div>;
}
return <div style={{ backgroundColor: "red" }}>Loaded</div>;
};

export default Router;

componentDidMount()

import React, { Component } from "react";
import { connect } from "react-redux";

import { load } from "./actions/user";

class Router extends Component {
componentDidMount() {
this.props.load(true);
}

render() {
const { loading } = this.props;
if (loading) {
return <div>Loading...</div>;
}
return <div style={{ backgroundColor: "red" }}>Loaded</div>;
}
}

export default connect(
state => ({
loading: state.user.loading
}),
{ load }
)(Router);

最佳答案

这是因为 useEffectcomponentDidMount 在 React 生命周期的不同部分运行。

componentDidMountuseLayoutEffect 在“提交阶段”结束时同步运行。

useEffect 以短暂的延迟异步运行,与“提交阶段”分开。

所以不,它们并不完全等同。

关于reactjs - 在 useEffect() 内部使用 useDispatch() 时,操作似乎不会立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59618129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com