我有一个非常简单的React.js
组件,我需要制作一个isomorphic
(在服务器上呈现)。问题是,只有在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
请求能够完成(即使是在服务器上),并且只在此之后呈现。我怎样才能做到这一点?
发布于 2016-08-01 10:01:03
正如@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
状态为真时才呈现子组件。componentDidMount
方法是进行AJAX调用的地方,请注意,我在组件上使用一个变量来存储用户,而不是状态对象(通常应该只使用状态存储非常简单的值)。所有这些都使子组件变得简单得多,因为它现在只需要一个呈现方法,而不需要if/else
检查。
https://stackoverflow.com/questions/38695444
复制相似问题