Trong thành phần phản ứng của tôi, tôi đang cố gắng triển khai một spinner đơn giản trong khi yêu cầu ajax đang được thực hiện - tôi đang sử dụng trạng thái để lưu trữ trạng thái tải.
Vì lý do nào đó, đoạn mã này bên dưới trong thành phần React của tôi đã tạo ra lỗi này
Chỉ có thể cập nhật một thành phần được gắn hoặc lắp. Điều này thường có nghĩa là bạn đã gọi setState () trên một thành phần chưa được gắn kết. Đây là một điều không cần lựa chọn. Vui lòng kiểm tra mã cho thành phần không xác định.
Nếu tôi thoát khỏi lệnh gọi setState đầu tiên, lỗi sẽ biến mất.
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>
);
}
Câu hỏi đặt ra là tại sao tôi lại gặp lỗi này khi thành phần lẽ ra đã được gắn kết (vì nó được gọi từ componentDidMount) Tôi nghĩ rằng có thể an toàn để thiết lập trạng thái sau khi thành phần được gắn kết?