다음 구성 요소 ( 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을 사용하기 전에는 모두 문제가 없었습니다. 이제 1 개의 오류, 1 개의 경고가 표시되고 후속 질문이 있습니다.
오류 : 포착되지 않은 TypeError : null의 'otherChecked'속성을 읽을 수 없습니다.
경고 : getInitialState는 일반 JavaScript 클래스 인 RadioOther에 정의되었습니다. 이것은 React.createClass를 사용하여 생성 된 클래스에 대해서만 지원됩니다. 대신 상태 속성을 정의하려고 했습니까?
누구든지 오류가있는 곳을 볼 수 있습니다. DOM의 조건문 때문이라는 것을 알지만 초기 값을 올바르게 선언하지 않은 것 같습니다.
getInitialState를 정적으로 만들어야합니까?
getInitialState가 올바르지 않은 경우 내 proptype을 선언 할 적절한 위치는 어디입니까?
최신 정보:
RadioOther.propTypes = {
name: React.PropTypes.string,
other: React.PropTypes.bool,
options: React.PropTypes.array }
module.exports = RadioOther;
@ssorallen,이 코드 :
constructor(props) {
this.state = {
otherChecked: false,
};
}
을 생성 "Uncaught ReferenceError: this is not defined"
하고 아래에서 수정합니다.
constructor(props) {
super(props);
this.state = {
otherChecked: false,
};
}
하지만 이제 다른 버튼을 클릭하면 오류가 발생합니다.
Uncaught TypeError: Cannot read property 'props' of undefined
onChange={this.onRadChange}
, 와 같은 함수를 전달할this
때onRadChange
호출 될 때 인스턴스를 참조하지 않습니다 . 콜백을 바인딩render
하거나 생성자에서 수행해야합니다onChange={this.onRadChange.bind(this)}
..