class Contact extends React.Component {
constructor(props) {
super(props);
this.state = { name: props.name, value: props.value };
}
render() {
return <div>
<p>{this.state.name}: {this.state.value}</p>
</div>;
}
}
class ContactList extends React.Component {
constructor(props) {
super(props);
this.state = { contacts: props.contacts };
}
render() {
return <div>
{
this.state.contacts.map(function (c) {
return <Contact key={c.name.toString()} name={c.name} value={c.value} />
})
}
</div>;
}
}
function ContactListTwo(props) {
const contacts = props.contacts.map((c) =>
<Contact key={c.name.toString()} name={c.name} value={c.value} />
);
return (
<div>
{contacts}
</div>
);
}
class Root extends React.Component {
constructor(props) {
super(props);
this.state = { contacts: [] };
}
loadData() {
var xhr = new XMLHttpRequest();
xhr.open("get", this.props.apiUrl, true);
xhr.onload = function () {
var data = JSON.parse(xhr.responseText);
this.setState({ contacts: data.contacts });
}.bind(this);
xhr.send();
}
componentDidMount() {
this.loadData();
}
render() {
return <div>
<ContactList contacts={this.state.contacts} />
<ContactListTwo contacts={this.state.contacts} />
</div>;
}
}
ReactDOM.render(
<Root apiUrl="/api/contacts" />,
document.getElementById("content")
);
почему в одном случае -ContactList - не выводит ничего, и ошибки в консоли нет.
а во втором случае - ContactListTwo - все отрабатывает, рисует.
когда данные статические - работают оба компонента. когда подгрузка с api - только тот который ContactListTwo справляется.
может ContactList рисует до получения данных? render срабатывает раньше, не понимаю. тогда почему другой работает?