我想在React中做一些在任何其他框架中都很簡單的操作:我想從表單中收集一堆值。在React中讀取表單數據的最佳實踐
以前我做這樣的事情有一個骨幹視圖,這是非常簡單的:
readFormValues: function() {
this.data.foo = this.$('[name="foo"]').val();
this.data.bar = this.$('[name="bar"]:checked').val();
});
但在作出反應,我似乎無法找到一個簡單的方法來做到這一點。看來我唯一的選擇是......
注:道歉格式:代碼塊,並列出不在一起玩好:-(
完全繞過反應,並使用了jQuery +
e.target
訪問形式: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>;
}
這樣的作品,並且是簡單的,但感覺就像我繞過反應,使用JQuery時,我應該只正在使用React。
提供回調每表單控件:
handleFooClick: function(e) {
this.data.foo = event.target.value;
},
render: function() {
return <form><input name="foo" onChange="handleFooChange"/></form>;
}
這似乎是React/Flux方式,但感覺就像是瘋狂的不必要的工作。在我的Backbone示例中,每個表單控件只需要一行,但通過這種方法,我構建的每一個控件都必須具有自己的onChange處理函數(並且在渲染時我必須將該處理函數掛接到每個元素)。
編輯:這種方法的一個更不利的是,回調
this.props
和this.state
內不會指向我的表單控件的道具/狀態(這將指向輸入的道具/狀態)。這意味着我不僅必須爲每個輸入編寫一個處理程序,並且在我渲染時將該回調添加到每個輸入中,而且還必須將我的數據對象傳遞給每個輸入!使用裁判:
handleSubmit: function(e) {
this.state.data.foo = this.refs.foo.value;
},
render: function() {
return <form><input ref="foo"/></form>;
}
這似乎是一個更加健全的解決方案,因爲我只需要爲每個表單控件添加一個「ref」屬性,然後我可以像在Backbone中一樣輕鬆讀取數據。但是,所有React文檔都建議使用refs這種方法是錯誤的(所有使用refs的例子都涉及向控件發送信號,例如「關注此輸入」,而不是讀取控件中的數據)。
我覺得必須有一個「響應,香港專業教育學院」的方式來訪問我的表單數據,是不是不必要的複雜性,但我沒有看到它,因爲我不明白作出反應不夠好。如果有任何React專家可以解釋我錯過了什麼,我將不勝感激。
這是一個偉大的建議;我甚至不知道有'ReactLink'存在。但是,我看到兩件有關它的事情。首先,您鏈接的文章首先是「如果您剛接觸框架,請注意ReactLink對於大多數應用程序不是必需的,應謹慎使用。」其次,它似乎需要混搭,我認爲在React中不贊成使用混合插件? – machineghost