因为react是异步更新,state 状态更新需要一段时间。
而打印是同步操作,所以在打印时会发现打印的是之前的内容。
如果想打印显示的为现在内容可以使用 Promise
来封装要操作的函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="test"></div>
<!-- react 核心库 -->
<script src="../js/react.development.js"></script>
<!-- react DOM 操作库 -->
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script type="text/babel">
class Test extends React.Component{
state = {
msg: ‘e‘
}
// 将打印操作转为异步
changeMsg = (e) => {
new Promise((resolve, reject) => {
this.setState({
msg: e.target.value
})
resolve(e.target.value)
})
.then((res) => {
console.log(res)
})
}
render () {
return (
<div>
<input type="text" onChange={this.changeMsg} value={this.state.msg}/>
</div>
)
}
}
ReactDOM.render(<Test/>, document.getElementById(‘test‘))
</script>
</body>
</html>
REACT INPUT ONCHANGE事件不能立刻拿到值,只能拿到上次输入的值
原文:https://www.cnblogs.com/tonedog/p/14721566.html