javascript-react.js在ajax请求完成之前不会呈现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-react.js在ajax请求完成之前不会呈现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1413字,纯文字阅读大概需要3分钟。
内容图文
我有一个非常简单的React.js组件,我需要使它同构(呈现在服务器上).问题是,仅在ajax请求完成后,组件才用有用的信息呈现,如下所示:
export default React.createClass({
getInitialState() {
return {}
},
componentDidMount() {
fetch("/users/").then(response => {
this.setState(users: response.data)
})
},
render() {
if (this.state.users == undefined) {
return <div />
}
return <div>{this.state.users.map(some_function)}</div>
}
})
问题在于,将空div返回搜索引擎毫无意义.我希望ajax请求完成(甚至在服务器上)并仅在此之后呈现.我该如何实现?
解决方法:
就像@Dencker提到的那样,您想让父组件决定何时渲染子组件,这样可以工作:
// Parent
export default React.createClass({
getInitialState() {
return {
usersLoaded: false
}
},
componentDidMount() {
fetch("/users/").then(response => {
this._users = response.users;
this.setState({
usersLoaded: true
});
})
},
render() {
if ( this.state.usersLoaded ) {
return (
<ChildComponent users={this._users} />
)
} else {
return null;
}
}
});
// Child
export default React.createClass({
render() {
return <div>{this.props.users.map(some_function)}</div>
}
});
我在那儿做的是:
>在父组件上设置初始状态,即usersLoaded:false.
>在该组件的渲染功能中,确保仅在父级的usersLoaded状态为true时才渲染子级组件.
>父组件的componentDidMount方法是进行AJAX调用的地方,请注意,我在组件上使用了一个变量来存储用户,而不是状态对象(状态通常只用于存储非常简单的值).
>然后将其作为道具传递给子组件.
上面所有这些使子组件变得更加简单,因为它现在只需要一个render方法,而无需if / else检查.
内容总结
以上是互联网集市为您收集整理的javascript-react.js在ajax请求完成之前不会呈现全部内容,希望文章能够帮你解决javascript-react.js在ajax请求完成之前不会呈现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。