これは重複しない理由の説明:私のコードはすでに動作していますが、私はコメントに含めました。問題は、クリックハンドラ機能に含めるとコンテキストが変更される理由です。
私はReactで電卓プロジェクトを試みています。目標はonclickハンドラを数値ボタンに付けて、電卓の表示領域に数字が表示されるようにすることです。私はComponentDidMountからしようとしている場合は、レンダリングメソッドに直接ハンドラが動作している場合、私はエラーthis.inputDigit is not a function
を取得します。 this.inputDigit(digit)
を正しくバインドするにはどうすればよいですか?onclickハンドラを `this 'に正しくバインドするにはReact
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>
)
}
}
可能性のある[this.setStateは関数ではありません](https:// stacko verflow.com/questions/33381756/this-setstate-is-not-a-function) – jmargolisvt
@jmargolisvt Dudeなぜ私はそれが重複していないのではないかと述べた。また、エラーメッセージも異なる。あなたは親切に質問をunvoredできますか? –
私はあなたにdownvoteしなかった。あなたが得ている答えは、私が複写でマークしたものと同じであることに注意してください。 :) – jmargolisvt