React bileşenimde, bir ajax isteği devam ederken basit bir döndürücü uygulamaya çalışıyorum - yükleme durumunu saklamak için durumu kullanıyorum.
Bazı nedenlerden dolayı, React bileşenimdeki bu kod parçası bu hatayı atıyor
Yalnızca monte edilmiş veya monte edilmiş bir bileşeni güncelleyebilir. Bu genellikle, bağlanmamış bir bileşende setState () çağırdığınız anlamına gelir. Bu işlem yok. Lütfen tanımlanmamış bileşenin kodunu kontrol edin.
İlk setState çağrısından kurtulursam, hata kaybolur.
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>
);
}
Soru, bileşenin zaten bağlanması gerektiğinde bu hatayı neden alıyorum (componentDidMount'tan çağrıldığı gibi), bileşen monte edildikten sonra durumu ayarlamanın güvenli olduğunu düşündüm?