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
具有定义良好的语义。此外,不在构造函数中放入副作用(如服务器调用!)是一种很好的通用编程实践。