Я хочу отправить действие, когда страница впервые монтируется. Это действие немедленно устанавливает значение loading
в значение true, а через 2 секунды устанавливает его в значение false.
Обращая внимание на то, что при использовании компонента hooks / реагировать он ведет себя по-разному. Когда я пишу его в компоненте реакции, используя componentDidMount
, все работает нормально. Но с крючками 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);