Ang*_*ges 3 javascript reactjs
我最近开始学习 React,我正在尝试创建一个计算器作为自己的学习练习。
目的是每当我单击数字按钮时,该值就会出现在输入组件中。到目前为止,我已经让它工作了,但该值仅在第二个 onClick 事件上发生变化。
目前 val1 道具在第一次点击时从输入中消失,然后在第二次点击时重新出现,并带有前一个按钮值。
任何关于我的代码结构的提示都非常受欢迎,任何关于构建我的计算器的指导也将是很棒的。我对此还是很陌生。
这是我的代码如下:
应用程序.js
import React, {Component} from 'react';
import InputField from './Components/InputField';
import Numbers from './Components/Numbers';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.state = {
number: 0,
val1: 0,
val2: 0
}
}
numberChange(num1, num2){
this.setState({val1: num1});
}
render() {
return (
<div className="App">
<InputField val1={this.state.val1} value={this.state.number || ''} onChange={this.numberChange.bind(this)} />
<Numbers onChange={this.numberChange.bind(this)} />
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
输入字段.js
import React, {Component} from 'react';
class InputField extends Component {
constructor(props) {
super(props);
this.state = {
number: 0
}
}
onChange(e) {
console.log('onChange event fired');
this.setState({
number: e.target.value
})
this.props.onChange(this.state.number);
console.log(this.state.number);
}
render() {
return (
<div className="inputField">
<input type="number" value={this.props.val1 || ''} onChange={this.onChange.bind(this)}/>
</div>
);
}
}
export default InputField;
Run Code Online (Sandbox Code Playgroud)
数字.js
import React, {Component} from 'react';
import {Button} from 'react-bootstrap'
class Numbers extends Component {
constructor(props) {
super(props);
this.state = {
number: props.value
}
}
number(e) {
console.log('You\'ve pressed number ' + e.target.value);
this.setState({
number: e.target.value
})
this.props.onChange(this.state.number);
}
render() {
return (
<div className="buttons">
<Button bsStyle="primary" value="1" onClick={this.number.bind(this)}>1</Button>
<Button bsStyle="primary" value="2" onClick={this.number.bind(this)}>2</Button>
<Button bsStyle="primary" value="3" onClick={this.number.bind(this)}>3</Button>
<Button bsStyle="primary" value="4" onClick={this.number.bind(this)}>4</Button>
<Button bsStyle="primary" value="5" onClick={this.number.bind(this)}>5</Button>
<Button bsStyle="primary" value="6" onClick={this.number.bind(this)}>6</Button>
<Button bsStyle="primary" value="7" onClick={this.number.bind(this)}>7</Button>
<Button bsStyle="primary" value="8" onClick={this.number.bind(this)}>8</Button>
<Button bsStyle="primary" value="9" onClick={this.number.bind(this)}>9</Button>
</div>
);
}
}
export default Numbers;
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
setState 是一个异步函数,这意味着只有在调用 onChange 回调函数后才会更新数据。因此,App 组件仍然获得 的旧值this.state.number。
尝试在 setState 完成后调用 onChange 函数:
number(e) {
console.log('You\'ve pressed number ' + e.target.value);
this.setState({
number: e.target.value
}, () => {
this.props.onChange(this.state.number);
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6867 次 |
| 最近记录: |