内部参照input
を参照するonClick
イベントハンドラを持つクラスコンポーネントがあります。ただし、イベントハンドラinput
はnullです。コンストラクタのthis
にイベントハンドラをバインドします。React - ステートフルコンポーネントイベントハンドラの参照にアクセスできない
import React, { Component} from 'react';
class MyComponent extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}
onClick(e) {
// The following throws "Cannot read property 'click' of undefined"
this.input.click();
}
render() {
return (
<div className="container" onClick={this.onClick}>
<input type="text" ref={input => this.input = input} />
</div>
);
}
}
はなぜthis.input
私のイベントハンドラ内で定義されていませんか?
編集 明らかに、コードは正常に動作しているだけで、私の環境にはありません。私はwebpackとbabelとenvと反応プリセットをホットリロードで使用しています。私は電子をターゲットにしています。
フル・エラー・スタック:
my-component.jsx:12 Uncaught TypeError: Cannot read property 'click' of undefined
at MyComponent.onClick (http://localhost:8080/renderer.js:19224:15)
at Object.ReactErrorUtils.invokeGuardedCallback (webpack:///./node_modules/react-dom/lib/ReactErrorUtils.js?:69:16)
at executeDispatch (webpack:///./node_modules/react-dom/lib/EventPluginUtils.js?:85:21)
at Object.executeDispatchesInOrder (webpack:///./node_modules/react-dom/lib/EventPluginUtils.js?:108:5)
at executeDispatchesAndRelease (webpack:///./node_modules/react-dom/lib/EventPluginHub.js?:43:22)
at executeDispatchesAndReleaseTopLevel (webpack:///./node_modules/react-dom/lib/EventPluginHub.js?:54:10)
at Array.forEach (native)
at forEachAccumulated (webpack:///./node_modules/react-dom/lib/forEachAccumulated.js?:24:9)
at Object.processEventQueue (webpack:///./node_modules/react-dom/lib/EventPluginHub.js?:254:7)
at runEventQueueInBatch (webpack:///./node_modules/react-dom/lib/ReactEventEmitterMixin.js?:17:18)
EDIT
は、以下の私の答えを参照してくださいそれを考え出しました。
このコードに問題はありません。それが動作します。あなたはもっと詳細を書く必要があります。 –
私はあなたのコードを実行し、それが働いた... –
奇妙な、私はオンラインエディタでそれを実行するが、私のwebpack環境ではない私のために働く。 – Bob