Aşağıdaki bileşene sahibim ( 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>
)
}
};
ECMAScript6'yı kullanmadan önce her şey yolundaydı, şimdi 1 hata, 1 uyarı alıyorum ve bir takip sorum var:
Hata: Yakalanmamış TypeError: null 'otherChecked' özelliği okunamıyor
Uyarı: getInitialState, düz bir JavaScript sınıfı olan RadioOther üzerinde tanımlandı. Bu yalnızca React.createClass kullanılarak oluşturulan sınıflar için desteklenir. Bunun yerine bir devlet mülkü tanımlamak mı istediniz?
Hatanın nerede olduğunu görebilen var mı, bunun DOM'daki koşullu ifadeden kaynaklandığını biliyorum, ancak görünüşe göre başlangıç değerini doğru olarak beyan etmiyorum?
GetInitialState'i statik yapmalı mıyım
GetInitialState doğru değilse mülk türlerimi bildirmek için uygun yer neresidir?
GÜNCELLEME:
RadioOther.propTypes = {
name: React.PropTypes.string,
other: React.PropTypes.bool,
options: React.PropTypes.array }
module.exports = RadioOther;
@ssorallen, bu kod:
constructor(props) {
this.state = {
otherChecked: false,
};
}
üretir "Uncaught ReferenceError: this is not defined"
ve aşağıda bunu düzeltir
constructor(props) {
super(props);
this.state = {
otherChecked: false,
};
}
ancak şimdi, diğer düğmeye tıklamak artık hata veriyor:
Uncaught TypeError: Cannot read property 'props' of undefined
onChange={this.onRadChange}
,this
örneğin kırmızı ifade etmezonRadChange
denir. İçeri bağlama geri aramaları gerekirrender
veya yapıcı bunu yapmak:onChange={this.onRadChange.bind(this)}
.