次のコンポーネント(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が正しくない場合、プロップタイプを宣言する適切な場所はどこですか?
更新:
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)}
。