मेरी प्रतिक्रिया घटक में im एक साधारण स्पिनर को लागू करने की कोशिश कर रहा है, जबकि एक अजाक्स अनुरोध प्रगति पर है - लोडिंग स्थिति को संग्रहीत करने के लिए राज्य का उपयोग करके im।
किसी कारण से मेरे रिएक्ट घटक में नीचे दिए गए कोड का यह टुकड़ा इस त्रुटि को फेंकता है
केवल एक घुड़सवार या बढ़ते घटक को अपडेट कर सकते हैं। इसका आम तौर पर मतलब है कि आपने अनमाउंट किए गए घटक पर सेटस्टेट () कहा है। यह एक नो-ऑप है। कृपया अपरिभाषित घटक के लिए कोड की जाँच करें।
अगर मैं पहले सेटस्टैट कॉल से छुटकारा पा लेता हूं तो त्रुटि दूर हो जाती है।
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>
);
}
सवाल यह है कि जब घटक को पहले ही माउंट किया जाना चाहिए (जैसा कि घटकडिमाउंट से कहा जा रहा है) तो मुझे यह त्रुटि क्यों हो रही है? मुझे लगा कि घटक के माउंट होने के बाद राज्य को सेट करना सुरक्षित था?