• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

REACT INPUT ONCHANGE事件不能立刻拿到值,只能拿到上次输入的值

开发技术 开发技术 2周前 (04-30) 7次浏览

因为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>

喜欢 (0)