Мне трудно понять, почему я не могу сделать что-то подобное.
loadPostsFromServer: function() {
$.ajax({
url: '/allPosts',
dataType: 'json',
success: function(data) {
console.log(data);
this.setState({posts:data, items:data});
//this.setState({items:data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url,status, err.toString());
}.bind(this)
});
},
loadUserFromServer: function() {
$.ajax({
url: '/user',
dataType: 'json',
success: function(data) {
this.setState({user:data.local});
//console.log(this.state.user);
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url,status, err.toString());
}.bind(this)
});
},
getInitialState: function() {
return {
posts: [],
items: [],
user: []
}
},
componentDidMount: function() {
this.loadPostsFromServer();
this.loadUserFromServer();
//this.setState({items: this.state.posts});
//setInterval(this.loadPostsFromServer, this.props.pollInterval);
},
render: function() {
<div className="Posts">
<List user={this.state.user} posts={this.state.items} />
</div>
}
Где List может быть что-то вроде этого и не может сделать this.props.user print
var List = React.createClass({ //has to be called list
render: function() {
return (
<p>{this.props.user}</p>
<ul>
{
this.props.posts.map(post){
return (<p>{post.title}</p>)
})
}
</ul>
)
}
});
но может сделать это:
var List = React.createClass({
render: function() {
return (<p>{this.props.user}</p>)
}
});
В основном я передаю два реквизита в своей реальной функции, а вызов ajax доставляет пользователю массива, информацию о пользователе и сообщение в массиве с информацией о сообщении. Я могу отображать информацию о сообщении хорошо, и информация пользователя также заполнена, однако я не могу фактически отображать информацию о пользователе, полученную от вызова ajax get. Я распечатал состояние массива, и он был заполнен и заполнен. Однако переданные им сообщения возвращают такие сообщения, как не могут читать {this.props.user.firstName} и т.д., Однако, записывая его вторым способом и не включая сообщения, он отлично работает. Как использовать оба реквизита в функции карты?
Будьте осторожны, в функции рендеринга вам всегда нужен тег wrap, чтобы заставить React работать. Вы должны добавить <div>
в render
компонента List
.
var List = React.createClass({ //has to be called list
render: function() {
return (
<div> <-- ALWAYS HAS A WRAP TAG
<p>{this.props.user}</p>
<ul>
{
this.props.posts.map(post){
return (<p>{post.title}</p>)
})
}
</ul>
</div>
)
}
});
Этот код ниже работает, потому что есть <p>
для обертывания содержимого.
var List = React.createClass({
render: function() {
return (<p> <-- WRAP TAG
{this.props.user}
</p>)
}
});
</o>
вместо</p>