Trong khi tôi không cá nhân tôi nghĩ bạn nên lưu trữ địa phương, tiểu bang thành phần tạm thời (như các hộp đầu vào đang tiến hành) ở một vị trí tập trung (như một cửa sổ thông lượng) trong hầu hết các trường hợp, ở đây có thể có ý nghĩa, tùy thuộc vào số lượng bạn có, đặc biệt vì nó giống như các đầu vào đã có một số tương tác máy chủ/xác thực xung quanh chúng. Đẩy trạng thái đó lên cấu trúc phân cấp thành phần hoặc vào một số vị trí trung tâm khác có thể giúp ích rất nhiều trong trường hợp này.
Một ý tưởng thay thế ngoài đỉnh đầu của tôi là sử dụng mixin trong các thành phần có thể cần đặt lại trạng thái cục bộ và thực hiện một số loại kích hoạt sự kiện, v.v. Ví dụ, bạn có thể sử dụng Node của EventEmitter
hoặc một thư viện như EventEmitter3 với một mixin như thế này (cảnh báo: không kiểm tra, có lẽ tốt nhất này là giả :)
var myEmitter = new EventEmitter(); // or whatever
var ResetStateMixin = {
componentWillMount: function() {
myEmitter.on("reset", this._resetState);
},
componentWillUnmount: function() {
myEmitter.off("reset", this._resetState);
},
_resetState: function() {
this.replaceState(this.getInitialState());
},
triggerReset: function() {
myEmitter.emit("reset");
}
};
Sau đó, bạn có thể sử dụng nó trong các thành phần như sau:
React.createClass({
mixins: [ResetStateMixin],
getInitialState: function() {
return { ... };
},
onResetEverything: function() {
// Call this to reset every "resettable" component
this.triggerReset();
}
});
này là rất cơ bản và khá nặng tay (bạn chỉ có thể đặt lại tất cả các thành phần, mỗi thành phần gọi replaceState(this.getInitialState())
, vv) nhưng những vấn đề có thể được giải quyết bằng cách mở rộng một chút (ví dụ như có nhiều bộ phát sự kiện, cho phép thành phần mixin -specific resetState
triển khai, v.v.).
Cần lưu ý rằng bạn do phải sử dụng các đầu vào được kiểm soát để tính năng này hoạt động; trong khi bạn không cần phải đẩy trạng thái của bạn lên tất cả các phân cấp thành phần, bạn vẫn muốn tất cả các đầu vào của mình có các trình xử lý value
và onChange
(v.v).
Có lẽ bạn nên chuyển tiểu bang làm đạo cụ cho trẻ em – David
Nếu bạn sử dụng mô hình [thành phần được kiểm soát] (https://facebook.github.io/react/docs/forms.html#controlled-components) được đề cập trong tài liệu React và lưu trữ trạng thái cao lên cấp bậc mà bạn đang gọi 'replaceState', bạn cũng có thể "đặt lại" trạng thái của biểu mẫu. –
@ssorallen Các đầu vào được nhúng trong các phần tử có chức năng và thông tin liên lạc riêng với máy chủ. ví dụ. trường "tên người dùng" thực hiện kiểm tra AJAX riêng cho các bản sao, như một phần của xác thực * trường *. – fadedbee