Saya memiliki komponen berikut ( radioOther.jsx
):
'use strict';
//module.exports = <-- omitted in update
class RadioOther extends React.Component {
// omitted in update
// getInitialState() {
// propTypes: {
// name: React.PropTypes.string.isRequired
// }
// return {
// otherChecked: false
// }
// }
componentDidUpdate(prevProps, prevState) {
var otherRadBtn = this.refs.otherRadBtn.getDOMNode();
if (prevState.otherChecked !== otherRadBtn.checked) {
console.log('Other radio btn clicked.')
this.setState({
otherChecked: otherRadBtn.checked,
});
}
}
onRadChange(e) {
var input = e.target;
this.setState({
otherChecked: input.checked
});
}
render() {
return (
<div>
<p className="form-group radio">
<label>
<input type="radio"
ref="otherRadBtn"
onChange={this.onRadChange}
name={this.props.name}
value="other"/>
Other
</label>
{this.state.otherChecked ?
(<label className="form-inline">
Please Specify:
<input
placeholder="Please Specify"
type="text"
name="referrer_other"
/>
</label>)
:
('')
}
</p>
</div>
)
}
};
Sebelum menggunakan ECMAScript6 semuanya baik-baik saja, sekarang saya mendapatkan 1 kesalahan, 1 peringatan dan saya memiliki pertanyaan tindak lanjut:
Kesalahan: TypeError Tidak Tertangkap: Tidak dapat membaca properti 'otherChecked' dari null
Peringatan: getInitialState didefinisikan di RadioOther, kelas JavaScript biasa. Ini hanya didukung untuk kelas yang dibuat menggunakan React.createClass. Apakah Anda bermaksud mendefinisikan properti negara?
Adakah yang bisa melihat di mana letak kesalahan, saya tahu itu karena pernyataan bersyarat di DOM tetapi ternyata saya tidak menyatakan nilai awalnya dengan benar?
Haruskah saya membuat getInitialState menjadi statis
Di mana tempat yang tepat untuk mendeklarasikan proptypes saya jika getInitialState salah?
MEMPERBARUI:
RadioOther.propTypes = {
name: React.PropTypes.string,
other: React.PropTypes.bool,
options: React.PropTypes.array }
module.exports = RadioOther;
@ssorallen, kode ini:
constructor(props) {
this.state = {
otherChecked: false,
};
}
menghasilkan "Uncaught ReferenceError: this is not defined"
, dan sementara di bawah mengoreksinya
constructor(props) {
super(props);
this.state = {
otherChecked: false,
};
}
tetapi sekarang, mengklik tombol lain sekarang menghasilkan kesalahan:
Uncaught TypeError: Cannot read property 'props' of undefined
onChange={this.onRadChange}
,this
tidak merujuk ke instance saatonRadChange
dipanggil. Anda perlu callback mengikat dalamrender
atau melakukannya di constructor:onChange={this.onRadChange.bind(this)}
.