javascript – 在获取所有信息之前,如何阻止React组件呈现?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在获取所有信息之前,如何阻止React组件呈现?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2654字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 在获取所有信息之前,如何阻止React组件呈现?](/upload/InfoBanner/zyjiaocheng/702/f91fab21df424506a3105289a5990c83.jpg)
我需要在渲染我的组件之前获取一些信息.该信息将由API提供,并通过ajax调用获取.
我只是想在渲染我的组件之前等待10秒,但它说:
Uncaught Invariant Violation:Login.render():必须返回有效的ReactComponent.您可能已返回undefined,数组或其他一些无效对象.
在履行承诺后,我可以渲染我的组件吗?
/** Page Login */
class Login extends React.Component {
/**
* @constructor
* @param {object} props La fonction super() appelle le parent pour y transmettre ses propriétés
*/
constructor(props) {
super(props);
this.handleFormSubmit = this.handleFormSubmit.bind(this);
}
/**
* Re?oit les valeurs des formulaires
*/
handleFormSubmit(data) {
const { dispatch } = this.props;
dispatch(fetchLoginAuth(data));
}
normalRender() {
return (
<div id="login-page">
<div className="container-fluid">
<div className="row">
<div className="col-md-2">
<Link to="/" className="home-link"><img src={BASE_URL + '/assets/img/logo.svg'} alt="Logo" /></Link>
</div>
</div>
<div className="row">
<div className="col-lg-4 col-lg-offset-4">
<h1><FormattedMessage {...messages.loginPageTitle} /></h1>
</div>
</div>
{React.cloneElement(this.props.children || <div />, { onSubmit: this.handleFormSubmit, login: this.props.login })}
</div>
</div>
);
}
/**
* Render le component - ReactTransitionGroup
* @return {JSX} Rend la page Registration
*/
render() {
setTimeout(this.normalRender, 10000);
}
}
我使用ES6和JSX,redux,一个带反应路由器的通用路由器.
非常感谢您的帮助!
解决方法:
这是我通常做的事情:
class Login extends React.Component {
constructor(props) {
//IMPLEMENT OTHER JUNK HERE
this.state = {
data: null //This is what our data will eventually be loaded into
};
}
componentWillMount() {
this.loadData();
}
loadData() {
/*LOAD DATA, INSERT BELOW LINE IN CALLBACK FUNCTION
this.setState({
data: //LOADED DATA
});
*/
}
render() {
if (!this.state.data) {
return <div />
}
//WE HAVE DATA, DO A NORMAL RENDER
return (
<div id="login-page">
<div className="container-fluid">
<div className="row">
<div className="col-md-2">
<Link to="/" className="home-link"><img src={BASE_URL + '/assets/img/logo.svg'} alt="Logo" /></Link>
</div>
</div>
<div className="row">
<div className="col-lg-4 col-lg-offset-4">
<h1><FormattedMessage {...messages.loginPageTitle} /></h1>
</div>
</div>
{React.cloneElement(this.props.children || <div />, { onSubmit: this.handleFormSubmit, login: this.props.login })}
</div>
</div>
);
}
}
这是将要发生的事情的细分……
>组件将加载
> componentWillMount()触发,运行loadData()
> loadData()启动ajax请求,在ajax请求返回数据之前返回,因为我们喜欢异步数据加载
> render()运行.由于this.state.data为null,我们已经传入if块,并且< div />退回.
> Ajax数据加载完成,并进行this.setState()调用,强制重新渲染.
> render()再次运行.由于this.state.data现在包含一个值,我们跳过if块并渲染我们正常的东西.
内容总结
以上是互联网集市为您收集整理的javascript – 在获取所有信息之前,如何阻止React组件呈现?全部内容,希望文章能够帮你解决javascript – 在获取所有信息之前,如何阻止React组件呈现?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。