我有一個類組件,其中有一個onClick
事件處理程序,它引用內部參考input
。但是,事件處理程序input
爲空。我在構造函數中將事件處理函數綁定到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與環境和反應預置w /熱重新加載。我的目標是電子。
完整的錯誤堆棧:
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)
編輯
想通了看到我的回答如下。
此代碼沒有任何問題。它會工作。你需要寫更多的細節。 –
我跑你的代碼,它的工作... –
奇怪的是,它適用於我,當我在線編輯器中運行它,但不是在我的webpack環境中。 – Bob