Penasaran apa cara yang tepat untuk mendekati ini adalah:
var Hello = React.createClass({
getInitialState: function() {
return {total: 0, input1:0, input2:0};
},
render: function() {
return (
<div>{this.state.total}<br/>
<input type="text" value={this.state.input1} onChange={this.handleChange} />
<input type="text" value={this.state.input2} onChange={this.handleChange} />
</div>
);
},
handleChange: function(e){
this.setState({ ??? : e.target.value});
t = this.state.input1 + this.state.input2;
this.setState({total: t});
}
});
React.renderComponent(<Hello />, document.getElementById('content'));
Jelas Anda bisa membuat fungsi handleChange yang terpisah untuk menangani setiap input yang berbeda, tapi itu tidak terlalu bagus. Demikian pula Anda dapat membuat komponen hanya untuk input individu, tetapi saya ingin melihat apakah ada cara untuk melakukannya seperti ini.
javascript
reactjs
jsx
T3db0t
sumber
sumber
this.setState({ [e.target.name]: e.target.value });
Anda dapat menggunakan
.bind
metode ini untuk membuat parameter terlebih dahulu kehandleChange
metode. Itu akan menjadi sesuatu seperti:(Saya juga dibuat
total
dihitung pada waktu render, karena itu adalah hal yang disarankan untuk dilakukan.)sumber
this.handleChange.bind(...)
menciptakan fungsi baru. Dalam kasus Anda menggunakanshouldComponentUpdate
denganPureRenderMixin
atau yang serupa itu akan pecah. Semua komponen input Anda akan dirender ulang ketika nilai tunggal berubah.handleChange
untukhandleChange(name) { return event => this.setState({name: event.target.value}); }
Anda dapat melewati fungsi "sama" (tidak akan membuat fungsi baru seperti yang dilakukan dengan menggunakan.bind()
Kemudian, Anda dapat melewati fungsi tersebut:this.handleChange("input1")
this.setState(change, function () { console.log(this.state.input1); );
referensi: stackoverflow.com/questions/30782948/…The
onChange
event gelembung ... Jadi Anda bisa melakukan sesuatu seperti ini:Dan metode setField Anda mungkin terlihat seperti ini (dengan asumsi Anda menggunakan ES2015 atau lebih baru:
Saya menggunakan sesuatu yang mirip dengan ini di beberapa aplikasi, dan itu sangat berguna.
sumber
Solusi usang
valueLink/checkedLink
tidak digunakan lagi dari core Bereaksi, karena membingungkan sebagian pengguna. Jawaban ini tidak akan berfungsi jika Anda menggunakan React versi terbaru. Tetapi jika Anda suka, Anda dapat dengan mudah meniru dengan membuatInput
komponen Anda sendiriKonten jawaban lama:
Apa yang ingin Anda capai bisa jauh lebih mudah dicapai dengan menggunakan 2-way data binding help of React.
Mudah bukan?
http://facebook.github.io/react/docs/two-way-binding-helpers.html
Anda bahkan dapat menerapkan mixin Anda sendiri
sumber
Anda juga dapat melakukannya seperti ini:
sumber
[]
sekitarinput
ke setState. Itu membuat propertiAnda dapat menggunakan khusus
React
atribut yang disebutref
dan kemudian mencocokkan node DOM nyata dalamonChange
acara menggunakanReact
'sgetDOMNode()
fungsi:sumber
prev
hanya nama yang saya atur dalamrender()
metode inievent.target === this.refs.prev
. facebook.github.io/react/blog/2015/10/10/…@Vigril Disgr4ce
Ketika datang ke bentuk multi-bidang, masuk akal untuk menggunakan fitur utama React: komponen.
Dalam proyek saya, saya membuat komponen TextField, yang mengambil prop nilai minimal, dan menangani penanganan perilaku umum bidang input teks. Dengan cara ini Anda tidak perlu khawatir tentang melacak nama bidang saat memperbarui status nilai.
sumber
Anda dapat melacak nilai setiap anak
input
dengan membuatInputField
komponen terpisah yang mengelola nilai satu anakinput
. MisalnyaInputField
bisa:Sekarang nilai masing-masing
input
dapat dilacak dalam instance terpisah dariInputField
komponen ini tanpa membuat nilai terpisah dalam status induk untuk memantau setiap komponen anak.sumber
Saya akan memberikan solusi yang sangat sederhana untuk masalah ini. Misalkan kita memiliki dua input
username
danpassword
, tetapi kita ingin pegangan kita menjadi mudah dan generik, sehingga kita dapat menggunakannya kembali dan tidak menulis kode boilerplate.I. bentuk Kami:
II. Konstruktor kami, yang ingin kami simpan
username
danpassword
, sehingga kami dapat mengaksesnya dengan mudah:III. Pegangan yang menarik dan "generik" dengan hanya satu
onChange
acara didasarkan pada ini:Biarkan saya jelaskan:
1.When perubahan terdeteksi
onChange(event)
itu disebut2.Kemudian kita mendapatkan parameter nama field dan nilainya:
let inputName = event.target.name; ex: username
let value = event.target.value; ex: itsgosho
3. Berdasarkan parameter nama, kami mendapatkan nilai kami dari status di konstruktor dan memperbaruinya dengan nilai:
this.state['username'] = 'itsgosho'
4. Kunci yang perlu diperhatikan di sini adalah bahwa nama bidang harus cocok dengan parameter kami di negara bagian
Semoga saya membantu seseorang entah bagaimana :)
sumber
Kunci negara Anda harus sama dengan nama bidang input Anda. Kemudian Anda dapat melakukan ini dalam metode handleEvent;
sumber
Hai, sudah memperbaiki jawaban sallallen . Anda tidak perlu mengikat fungsi karena Anda dapat mengakses input tanpa itu.
sumber