Javascript 是否可以使用setState触发onChange事件?

Javascript 是否可以使用setState触发onChange事件?,javascript,reactjs,events,state,onchange,Javascript,Reactjs,Events,State,Onchange,react onChange事件是否仅在用户键入输入字段时触发 我想在表单上设置一个脏标志,这样当用户导航出一个页面时,它会触发一个对话框,询问他是否真的想放弃更改。isDirty标志处于my component的状态,它是在用户键入输入字段时设置的。我担心当我用预定义的输入值初始化构造函数中的状态时,它可能会意外地触发一次更改,导致状态更改,并导致在用户甚至没有在字段中键入时将isDirty设置为true 现在它起作用了。这是预期行为吗?我100%安全吗 代码示例:是否有可能通过在构造函数中初

react onChange事件是否仅在用户键入输入字段时触发

我想在表单上设置一个脏标志,这样当用户导航出一个页面时,它会触发一个对话框,询问他是否真的想放弃更改。isDirty标志处于my component的状态,它是在用户键入输入字段时设置的。我担心当我用预定义的输入值初始化构造函数中的状态时,它可能会意外地触发一次更改,导致状态更改,并导致在用户甚至没有在字段中键入时将isDirty设置为true

现在它起作用了。这是预期行为吗?我100%安全吗

代码示例:是否有可能通过在构造函数中初始化状态或在按钮onClick处理程序中设置状态来触发handleChange

class ExampleComponent extends React.Component {
    constructor(props) {
      super(props);
      this.state = { exampleInput: "exampleValue" };
    }

    handleChange = (event) => {
      this.setState({
         exampleInput: event.target.value,
      });
    }

    onExampleButtonClick = () => {
      this.setState({
         exampleInput: "buttonClicked",
      })
    }

    render() {
      return (
        <div>
          <input name="exampleInput" value={this.state.exampleInput} onChange={this.handleChange}/>
          <button onClick={this.onExampleButtonClick}>Example Button</button>
        </div>
      );
    }
}
class ExampleComponent扩展了React.Component{
建造师(道具){
超级(道具);
this.state={exampleInput:“exampleValue”};
}
handleChange=(事件)=>{
这是我的国家({
示例输入:event.target.value,
});
}
一个示例按钮单击=()=>{
这是我的国家({
示例输入:“buttonClicked”,
})
}
render(){
返回(
示例按钮
);
}
}

是的,您可以使用componentDidUpdate并检查其中的状态。如果条件有效,您可以执行以下操作

var ev2 = new Event('input', { bubbles: true});
input.dispatchEvent(ev2);
其中,输入将是对元素的引用,您希望在此处引用更多时触发事件:

你能添加一些代码示例吗添加了一些代码示例,所以我们需要一些额外的魔法来实现它吗?onChange不会使用。。。那么只设置state,否则会导致无限循环?我只是想确保在创建组件时,仅调用setState或在构造函数中初始化state不会触发此事件。onChange事件不应触发的方式如果您从另一个地方以编程方式更改其绑定状态,我可能误解了您的问题您是对的,但我已经在onChange事件中设置了dirty标志,我得到了结果(当我从键盘输入时,我的标志才设置为true)。我只是想知道它是否安全(如果除了键入以外的任何东西都能够触发输入的handleChange,即初始化状态或通过setState设置状态)是的,它应该是安全的:。。如果这对你有帮助,请标出答案