微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React 17:设置输入值并触发 onChange

如何解决React 17:设置输入值并触发 onChange

当我更改输入中的值时,它会触发 onChange。 当我单击按钮时,它会更新状态值。 另一个组件(一个输入)在状态更新后再次渲染,它在屏幕上刷新,但 onChange 没有触发。

有一些解决方案,但我发现它们不适用于 React 17。

我希望它会显示

handleClick  <input id=​"wav" value=​"new value">​
handleChange triggered

事实上,它只能显示

handleClick  <input id=​"wav" value=​"new value">​

有些人建议手动触发 onChange,但我不知道如何创建合成事件。 就像在 onClick(eventClick) 中调用 handleChange(eventOnChange),但是如何创建真正的“eventOnChange”,例如 for formik。

参考:React: trigger onChange if input value is changing by state?

class TestTriggerOnChange extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      value: 'original value'
    }
  }
  handleChange (e) {
    console.log('handleChange triggered')
  }
  handleClick () {
    console.log('handleClick ',this.myinput)

    this.setState({value: 'new value'})
    var event = new Event('input',{ bubbles: true });
    this.myinput.dispatchEvent(event);
  }
  render () {
    return (
      <div>
        <input id='wav' value={this.state.value}  onChange={(e) => {this.handleChange(e)}} ref={(input)=> this.myinput = input}/>
        <button onClick={this.handleClick.bind(this)}>Change Input</button>
      </div>
    )
  }
}

我使用的包

    "react": "^17.0.0","react-animation-components": "^3.0.0","react-dom": "^17.0.1","react-popper": "^2.2.4","react-redux": "^7.2.2","react-redux-form": "^1.16.14","react-router-dom": "^5.2.0","react-scripts": "^4.0.1","react-transition-group": "^4.4.1","reactstrap": "^8.8.1","redux": "3.7.2","redux-logger": "3.0.6","redux-thunk": "2.2.0",

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。