javascript - react : trigger onChange if input value is changing by state?

标签 javascript reactjs

编辑:我不想仅在单击按钮时才调用handleChange。它与handleClick 无关。我在 @shubhakhatri 答案的评论中举了一个例子。

我想根据状态更改输入值,该值正在更改但不会触发 handleChange() 方法。如何触发 handleChange() 方法?

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
    value: 'random text'
    }
  }
  handleChange (e) {
    console.log('handle change called')
  }
  handleClick () {
    this.setState({value: 'another random text'})
  }
  render () {
    return (
      <div>
        <input value={this.state.value} onChange={this.handleChange}/>
        <button onClick={this.handleClick.bind(this)}>Change Input</button>
      </div>
    )
  }
}

ReactDOM.render(<App />,  document.getElementById('app'))

这是代码笔链接:http://codepen.io/madhurgarg71/pen/qrbLjp

最佳答案

您需要手动触发onChange事件。在文本输入上,onChange 监听 input 事件。

因此,在您的 handleClick 函数中,您需要触发类似的事件

handleClick () {
    this.setState({value: 'another random text'})
    var event = new Event('input', { bubbles: true });
    this.myinput.dispatchEvent(event);
  }

完整代码

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
    value: 'random text'
    }
  }
  handleChange (e) {
    console.log('handle change called')
  }
  handleClick () {
    this.setState({value: 'another random text'})
    var event = new Event('input', { bubbles: true });
    this.myinput.dispatchEvent(event);
  }
  render () {
    return (
      <div>
        <input readOnly value={this.state.value} onChange={(e) => {this.handleChange(e)}} ref={(input)=> this.myinput = input}/>
        <button onClick={this.handleClick.bind(this)}>Change Input</button>
      </div>
    )
  }
}

ReactDOM.render(<App />,  document.getElementById('app'))

<强> Codepen

编辑: 正如 @Samuel 在评论中所建议的,如果您不需要事件对象,更简单的方法是从 handleClick 调用 handleChangehandleChange 中,例如

handleClick () {
    this.setState({value: 'another random text'})
    this.handleChange();
  }

我希望这就是您所需要的并且对您有所帮助。

关于javascript - react : trigger onChange if input value is changing by state?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42550341/

相关文章:

javascript - 根据开始和结束时间戳计算百分比值

javascript - 类型错误 : Cannot read properties of null (reading 'useState' ) in Next. js

javascript - 防止在获取和附加项目后将 react-waypoint 滚动位置重置为顶部

javascript - 如何使用d3滚动整个页面

javascript - 如何在 ReactJS JSX 中执行嵌套的 if else 语句?

reactjs - 将 Google Analytics 测量 ID 与 React JS 集成

javascript - 每次在 react-apollo 和 graphql 中调用组件时如何向服务器重新发送查询

javascript - 仅使用 javascript 剥离网站效果

javascript - 经管理员批准后更新数据库

javascript - AngularJS 将数组添加到 json 表单对象