【发布时间】:2017-06-06 18:05:07
【问题描述】:
解释为什么这不是重复的:我的代码已经在运行,我已将其作为评论包含在内。问题是为什么当我将 this 包含在单击处理函数中时上下文会发生变化。
我正在尝试在 React 中创建一个计算器项目。目标是将 onclick 处理程序附加到数字按钮,以便数字显示在计算器显示区域上。如果处理程序直接写入渲染方法,则它正在工作,但是,如果我从 ComponentDidMount 尝试,我会收到错误this.inputDigit is not a function。如何正确绑定this.inputDigit(digit)?
import React from 'react';
import './App.css';
export default class Calculator extends React.Component {
// display of calculator initially zero
state = {
displayValue: '0'
}
//click handler function
inputDigit(digit){
const { displayValue } = this.state;
this.setState({
displayValue: displayValue+String(digit)
})
}
componentDidMount(){
//Get all number keys and attach click handler function
var numberKeys = document.getElementsByClassName("number-keys");
var myFunction = function() {
var targetNumber = Number(this.innerHTML);
return this.inputDigit(targetNumber); // This is not working
};
for (var i = 0; i < numberKeys.length; i++) {
numberKeys[i].onclick = myFunction;
}
}
render() {
const { displayValue } = this.state;
return (
<div className="calculator">
<div className="calculator-display">{displayValue}</div>
<div className="calculator-keypad">
<div className="input-keys">
<div className="digit-keys">
{/*<button className="number-keys" onClick={()=> this.inputDigit(0)}>0</button> This will Work*/}}
<button className="number-keys">0</button>
<button className="number-keys1">1</button>
<button className="number-keys">2</button>
<button className="number-keys">3</button>
<button className="number-keys">4</button>
<button className="number-keys">5</button>
<button className="number-keys">6</button>
<button className="number-keys">7</button>
<button className="number-keys">8</button>
<button className="number-keys">9</button>
</div>
</div>
</div>
</div>
)
}
}
【问题讨论】:
-
@jmargolisvt 伙计,我已经解释了为什么它不是重复的,而且错误消息也不同。您能否对这个问题投反对票?
-
我没有对你投反对票。请注意,您得到的答案与我在副本中标记的答案相同。 :)
标签: javascript reactjs this