Javascript 组件构造函数中的React/Redux加载应用程序状态

Javascript 组件构造函数中的React/Redux加载应用程序状态,javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在渲染高阶组件,比如说应用程序,在渲染之前,我需要从服务器获取一些数据。我所做的是,在应用程序的构造函数中,我发出loadApplicationState()操作,执行服务器调用并准备初始状态 一些简化的代码 class Application extends Component { constructor(props) { super(props); const { dispatch } = this.props; dispatch(loadApplicati

我正在渲染高阶组件,比如说
应用程序
,在渲染之前,我需要从服务器获取一些数据。我所做的是,在
应用程序的构造函数中,我发出
loadApplicationState()
操作,执行服务器调用并准备初始状态

一些简化的代码

class Application extends Component {
  constructor(props) {
    super(props);
    const { dispatch } = this.props;

    dispatch(loadApplicationState());
  }

  render() {
    const { stateLoaded } = this.props.state;

    render (
      <div>
        { stateLoaded ? renderApp() : renderProgress() }
      </div>
    )
  }
}

function loadApplicationState() {
  return (dispatch) => {
    // fetch data and once ready,
    applicationStateLoaded(data);
  }
}
类应用程序扩展组件{
建造师(道具){
超级(道具);
const{dispatch}=this.props;
分派(loadApplicationState());
}
render(){
const{stateload}=this.props.state;
渲染(
{stateLoaded?renderApp():renderProgress()}
)
}
}
函数loadApplicationState(){
返回(发送)=>{
//获取数据,并在准备就绪后,
已加载应用程序状态(数据);
}
}

我已经在练习中试过了,效果很好。但不确定这是正确的方法吗?尤其是为了这种目的使用构造函数。

我们在
componentDidMount
中运行它,然后在Redux状态下测试
$isLoading
标志,呈现加载指示器或实际UI。大概是这样的:

import React, { Component } from 'react';

const mapStateToProps = (state) => ({
  $isLoading: state.initialState.$isLoading
})
const mapDispatchToProps = (dispatch) => ({
  loadApplicationState(){ dispatch(loadApplicationState()); }
})

export class Application extends Component {
  componentDidMount(){
    this.props.loadApplicationState();
  }

  render(){
    const {
      $isLoading
    } = this.props;

    {$isLoading ? (<Loader />) : <ActualApplication />}
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Application)
import React,{Component}来自'React';
常量mapStateToProps=(状态)=>({
$isLoading:state.initialState.$isLoading
})
const mapDispatchToProps=(调度)=>({
loadApplicationState(){dispatch(loadApplicationState());}
})
导出类应用程序扩展组件{
componentDidMount(){
this.props.loadApplicationState();
}
render(){
常数{
$isLoading
}=这是道具;
{$isLoading?():}
}
}
导出默认连接(mapStateToProps、mapDispatchToProps)(应用程序)

对于ES6 react应用程序来说,
componentDidMount
constructor
不是一样吗?
constructor
componentWillMount
的替代品,而不是
componentDidMount
。但在我看来,构造函数是发布
loadState
操作的好地方。。为什么只在
componentDidMount
中执行此操作?
constructor
不能替代
componentWillMount
componentDidMount
<代码>构造函数
的调用完全取决于React的突发奇想,即使永远不会安装组件,也可以调用它。另一方面,
componentWillMount
componentDidMount
具有定义良好的语义。此外,不在构造函数中放入副作用(如服务器调用!)是一种很好的通用编程实践。