[解決済み] React, ES6 - getInitialStateがプレーンなJavaScriptクラスで定義されていた。
2022-05-17 16:19:44
質問
以下のようなコンポーネントがあります (
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つの警告が表示され、フォローアップの質問があります。
エラーです。 Uncaught TypeError: nullのプロパティ'otherChecked'を読み取ることができません。
警告です。 getInitialStateは、プレーンなJavaScriptクラスであるRadioOtherで定義されています。これは、以下の方法で作成されたクラスに対してのみサポートされています。 で作成されたクラスにのみサポートされています。代わりにstateプロパティを定義するつもりだったのでしょうか?
-
DOMの条件文が原因であることは分かっていますが、どうやら初期値を正しく宣言していないようです。
-
私は getInitialState 静的
-
getInitialStateが正しくない場合、私のプロティタイプを宣言する適切な場所はどこでしょうか?
UPDATEです。
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
どのように解決するのですか?
-
getInitialState
はES6クラスでは使用されません。代わりにthis.state
をコンストラクタで指定します。 -
propTypes
は静的なクラス変数であるか、クラスに割り当てられるべきで、コンポーネントインスタンスに割り当てられるべきではない。 - メンバメソッドは "オートバインド" を ES6 クラスで使用します。コールバックとして使用されるメソッドについては クラスプロパティ初期化子 を使用するか、コンストラクタでバインドインスタンスを割り当てます。
export default class RadioOther extends React.Component {
static propTypes = {
name: React.PropTypes.string.isRequired,
};
constructor(props) {
super(props);
this.state = {
otherChecked: false,
};
}
// Class property initializer. `this` will be the instance when
// the function is called.
onRadChange = () => {
...
};
...
}
ES6クラスについては、Reactのドキュメントを参照してください。 関数をクラスに変換する
関連
-
[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] Jestの `beforeEach` グローバルは何のためにあるのですか?
-
[解決済み] React の open mailto E-Mail クライアントの onClick で textarea から本文を取得する。
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み] Reactでes6クラスを使うときの「super()」と「super(props)」の違いとは?
-
[解決済み] JavaScript ES6クラスにおけるプライベートプロパティ
-
[解決済み】ES6クラス変数の代替品
-
[解決済み】es6のreactコンポーネントがexport defaultでしか動作しないのはなぜ?
-
[解決済み】プレーンオブジェクトをES6 Mapに変換する方法は?
-
[解決済み】ES6クラスベースのReactコンポーネントと機能的なES6 Reactコンポーネントの使い分けはいつ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] Jestの `beforeEach` グローバルは何のためにあるのですか?
-
[解決済み] react - createMuiThemeとcreateThemeの違い。
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] Angular 2の*ngForのReactでの同等品
-
[解決済み] React JS Jestで「SyntaxError: 予期しないトークン"
-
[解決済み] 非必須項目に対するYupバリデーション
-
[解決済み] react jsでウィンドウを開くイベントを処理するにはどうすればよいですか?
-
[解決済み] Uncaught (in promise) Error: リクエストに失敗、ステータスコード404
-
[解決済み] reactのuseStateフックでコールバックを使う方法 [重複]。