Tôi đang cố gắng để làm Bước 15 này ReactJS hướng dẫn: React.js Introduction For People Who Know Just Enough jQuery To Get By"Không thể cập nhật trong một cuộc chuyển trạng thái hiện" lỗi trong Phản ứng
Tác giả khuyến cáo như sau:
overflowAlert: function() {
if (this.remainingCharacters() < 0) {
return (
<div className="alert alert-warning">
<strong>Oops! Too Long:</strong>
</div>
);
} else {
return "";
}
},
render() {
...
{ this.overflowAlert() }
...
}
tôi đã cố gắng làm sau (mà trông ổn với tôi):
// initialized "warnText" inside "getInitialState"
overflowAlert: function() {
if (this.remainingCharacters() < 0) {
this.setState({ warnText: "Oops! Too Long:" });
} else {
this.setState({ warnText: "" });
}
},
render() {
...
{ this.overflowAlert() }
<div>{this.state.warnText}</div>
...
}
Và tôi nhận được lỗi sau đây trong giao diện điều khiển trong Chrome Dev Tools:
Không thể cập nhật trong quá trình chuyển đổi trạng thái hiện tại (chẳng hạn như trong phạm vi
render
hoặc hàm tạo của một thành phần khác). Phương thức render phải là một hàm thuần túy của đạo cụ và trạng thái; tác dụng phụ của hàm tạo là một mẫu chống nhưng có thể được chuyển đếncomponentWillMount
.
Đây là JSbin demo. Tại sao giải pháp của tôi không hoạt động và lỗi này có ý nghĩa gì?
Hãy suy nghĩ về nó: một thành phần được hiển thị lại khi trạng thái được cập nhật, vì vậy nếu bạn cập nhật trạng thái trong phương thức kết xuất, nó sẽ là một vòng lặp vô hạn. Bạn đang cố gắng làm gì ở đây? Cập nhật trạng thái bất cứ khi nào ai đó nhập văn bản hoặc nội dung nào đó. – Li357
@AndrewLi Lucid trả lời. Hãy tiếp tục và gửi nó như là một câu trả lời và tôi sẽ đánh dấu nó là chính xác. Tôi đang cố gắng làm gì ở đây: tôi đã cố gắng làm theo cách riêng của mình mà không cần nhìn vào giải pháp, và đây là những gì tôi nghĩ ra. –