Dalam komponen react saya, saya mencoba menerapkan pemintal sederhana saat permintaan ajax sedang berlangsung - saya menggunakan status untuk menyimpan status pemuatan.
Untuk beberapa alasan, bagian kode di bawah ini di komponen React saya membuat kesalahan ini
Hanya dapat memperbarui komponen yang dipasang atau dipasang. Ini biasanya berarti Anda memanggil setState () pada komponen yang tidak terpasang. Ini tidak boleh dilakukan. Silakan periksa kode untuk komponen yang tidak ditentukan.
Jika saya menyingkirkan panggilan setState pertama, kesalahan akan hilang.
constructor(props) {
super(props);
this.loadSearches = this.loadSearches.bind(this);
this.state = {
loading: false
}
}
loadSearches() {
this.setState({
loading: true,
searches: []
});
console.log('Loading Searches..');
$.ajax({
url: this.props.source + '?projectId=' + this.props.projectId,
dataType: 'json',
crossDomain: true,
success: function(data) {
this.setState({
loading: false
});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
this.setState({
loading: false
});
}.bind(this)
});
}
componentDidMount() {
setInterval(this.loadSearches, this.props.pollInterval);
}
render() {
let searches = this.state.searches || [];
return (<div>
<Table striped bordered condensed hover>
<thead>
<tr>
<th>Name</th>
<th>Submit Date</th>
<th>Dataset & Datatype</th>
<th>Results</th>
<th>Last Downloaded</th>
</tr>
</thead>
{
searches.map(function(search) {
let createdDate = moment(search.createdDate, 'X').format("YYYY-MM-DD");
let downloadedDate = moment(search.downloadedDate, 'X').format("YYYY-MM-DD");
let records = 0;
let status = search.status ? search.status.toLowerCase() : ''
return (
<tbody key={search.id}>
<tr>
<td>{search.name}</td>
<td>{createdDate}</td>
<td>{search.dataset}</td>
<td>{records}</td>
<td>{downloadedDate}</td>
</tr>
</tbody>
);
}
</Table >
</div>
);
}
Pertanyaannya adalah mengapa saya mendapatkan kesalahan ini ketika komponen seharusnya sudah dipasang (seperti yang dipanggil dari componentDidMount) Saya pikir aman untuk mengatur status setelah komponen dipasang?