ボタンをクリックして変数に格納された数値を変更しようとしていますが、ボタンをクリックすると変数の値は変更されません。もう一つはします。番号を1ずつ増やしていくので、ボタンをクリックするとcurrentNumber += 1
が表示され、変更後にはconsole.log
が実行されます。私が最初にクリックすると、デフォルト値が表示されます.2回目にクリックすると、実際には変更され、意図したコードの機能が損なわれます。私はこのためにReactを使っています。 Reactで数値を変更する関数が正常に動作しない
constructor(props) {
\t super(props);
this.state = {
currentSize: parseInt(this.props.size),
min: 4,
max: 40,
}
};
increaseSize(){
this.setState({currentSize: this.state.currentSize + 1}, function(){
if(this.state.currentSize >= this.state.max){
this.state.currentSize = this.state.max;
this.state.isRed = true;
} else if(this.state.currentSize < this.state.max){
this.state.isRed = false;
}
});
console.log(this.state.currentSize);
};
render() {
var isBold = this.state.bold ? 'normal' : 'bold';
var currentSize = this.state.currentSize;
var textColor = this.state.isRed ? 'red' : 'black';
return(
<div>
<button id="decreaseButton" hidden='true' onClick={this.decreaseSize.bind(this)}>-</button>
<span id="fontSizeSpan" hidden='true' style={{color: textColor}}>{currentSize}</span>
<button id="increaseButton" hidden='true' onClick={this.increaseSize.bind(this)}>+</button>
<span id="textSpan" style={{fontWeight: isBold, fontSize: currentSize}} onClick={this.showElements.bind(this)}>{this.props.text}</span>
</div>
);
}
内部のいずれかに異なる値を持ちます画像、表示される数字は26ですが、変数は25です。
さらに、カウンタの最小値と最大値を設定していることがわかります。いずれかの値に達すると、ディスプレイには1つずつ表示されますが、コンソールには表示されません。ディスプレイでは3と41で停止しますが、コンソールでは4と40で停止します。
私は間違っていますか?
編集:デフォルト値は16です。これは、初めてボタンをクリックしたときにコンソールに表示されるものなので、正しく動作しません。
まず、あなたは状態に反応変異させるべきではありません。 'increaseSize()'関数では、それを変更している 'this.state'に値を割り当てます。状態を変更したい場合は、 'this.setState()'を使います。次に、状態が変更される前に 'this.setState()'が返るため、状態が変更される前に 'increaseSize()'の 'console.log'が呼び出されています。状態が変更された後にコードを実行したい場合は、コードを 'this.setState()'のコールバックに入れてください。 – Sidney
@シドニーありがとう。私はsetStateの問題を修正しました。それは私の見解を見落としていました。私はまだ番号問題にぶち当たっています。どのコードに2番目のポイントを参照していますか? 編集:nevermind。私はそれを理解した:) – Leo