Tôi đang cố gắng làm điều gì đó trong React sẽ rất đơn giản trong bất kỳ khung công tác nào khác: Tôi muốn thu thập một loạt các giá trị từ một biểu mẫu.Thực hành tốt nhất để đọc dữ liệu biểu mẫu trong React
Trước đây tôi đã làm việc này với một Backbone View, và nó rất đơn giản:
readFormValues: function() {
this.data.foo = this.$('[name="foo"]').val();
this.data.bar = this.$('[name="bar"]:checked').val();
});
Nhưng trong Phản ứng tôi dường như không thể tìm thấy một cách dễ dàng để làm điều đó. Có vẻ như lựa chọn duy nhất của tôi là để ...
LƯU Ý: Xin lỗi cho các định dạng: khối mã và danh sách không chơi tốt với nhau :-(
hoàn toàn bỏ qua phản ứng và sử dụng jQuery +
e.target
để truy cập các hình thức:handleSubmit: function(e) {
var $form = $(e.target).parents('form:first');
this.data.foo = $form.find('[name="foo"]);
},
render: function() {
return <form onSubmit="handleSubmit"><input name="foo"/></form>;
}
đó làm việc, và là đơn giản, nhưng nó cảm thấy như mình đang bỏ qua phản ứng và sử dụng JQuery khi tôi nên chỉ sử dụng React.
Cung cấp callbacks để mỗi điều khiển biểu mẫu:
handleFooClick: function(e) {
this.data.foo = event.target.value;
},
render: function() {
return <form><input name="foo" onChange="handleFooChange"/></form>;
}
Đây dường như là cách phản ứng/thông lượng, nhưng nó cảm thấy như một lượng công việc không cần thiết. Trong ví dụ Backbone của tôi, tôi chỉ cần một dòng cho mỗi điều khiển biểu mẫu, nhưng với cách tiếp cận này, mọi điều khiển cuối cùng mà tôi xây dựng phải có trình xử lý onChange của riêng nó (và tôi phải móc trình xử lý đó cho mọi phần tử khi tôi render nó).
EDIT: Thêm một bất lợi của phương pháp này là bên trong callbacks
this.props
vàthis.state
sẽ không trỏ đến điều khiển biểu mẫu của tôi props/tiểu bang (nó sẽ trỏ đến đầu vào của props/tiểu bang). Điều này có nghĩa rằng không chỉ tôi phải viết một trình xử lý cho mỗi đầu vào VÀ thêm gọi lại đó vào mọi đầu vào khi tôi render, nhưng tôi cũng phải chuyển đối tượng dữ liệu của mình tới mọi đầu vào!Sử dụng refs:
handleSubmit: function(e) {
this.state.data.foo = this.refs.foo.value;
},
render: function() {
return <form><input ref="foo"/></form>;
}
Điều này có vẻ như một giải pháp lành mạnh hơn, vì tôi chỉ cần thêm thuộc tính "ref" vào mọi điều khiển biểu mẫu và sau đó tôi có thể đọc dữ liệu dễ dàng như trong Backbone. Tuy nhiên, tất cả các tài liệu React cho thấy rằng việc sử dụng refs theo cách đó là sai (tất cả các ví dụ sử dụng refs liên quan đến việc gửi tín hiệu đến các điều khiển, ví dụ như "tập trung vào đầu vào này", chứ không phải đọc dữ liệu ra khỏi các điều khiển).
Tôi cảm thấy phải có cách "Phản ứng" để truy cập dữ liệu biểu mẫu không cần thiết phức tạp, nhưng tôi không thấy nó vì tôi không hiểu đủ. Nếu bất kỳ chuyên gia React nào có thể giải thích những gì tôi đang bỏ lỡ, tôi sẽ đánh giá cao nó.
Đó là một gợi ý tuyệt vời; Tôi thậm chí còn không biết rằng 'ReactLink' tồn tại. Tuy nhiên, tôi thấy hai điều liên quan đến nó. Đầu tiên, bài viết bạn đã liên kết bắt đầu với "Nếu bạn mới làm quen với khung công tác, hãy lưu ý rằng ReactLink không cần thiết cho hầu hết các ứng dụng và nên được sử dụng thận trọng." Thứ hai, nó xuất hiện để yêu cầu một hỗn hợp, và tôi nghĩ rằng mix-in đã không được chấp nhận trong React? – machineghost