javascript - 如何将事件传递给 setState 回调函数?

标签 javascript reactjs callback setstate

React中是否可以将外部事件传递给setState的回调函数?

例子

someFunc(event) { 
    this.setState(
        {
            value: event.target.value
        },
        () => {                 
            this.props.onChange(event);    // <- cannot pass to here                
        }
    );
}

编辑:请参阅下面 Liam 接受的解决方案以获得出色的答案, 这是我的问题的具体解决方案:

解决方案

someFunc(event) { 
    event.persist() // <- add this line and event should pass without a problem
    this.setState(
        {
            value: event.target.value
        },
        () => {                 
            this.props.onChange(event);                 
        }
    );
}

最佳答案

您需要提取值或使用 e.persist()

https://reactjs.org/docs/events.html#event-pooling

class App extends React.Component {

something = (value) =>{
  {console.log(value, 'coming from child')}
}
  render() {

    return (
      <div >
        <Hello text={this.something} />
      </div>
    );
  }
}


class Hello extends React.Component {

  constructor() {
    super()
    this.state = {
      value: ''
    }
  }
  onChange = (e) => {
    const value = e.target.value;
    this.setState({ value }, () => {
    
      this.props.text(value)
    })
  }
  render() {

    return (
      <div style={{ padding: 24 }}>
        <input onChange={this.onChange} value={this.state.value} />

      </div>
    );
  }
}



ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='root' ></div>

或者如果您打算传递值状态,您可以在回调中使用 this.state.value 它会起作用。

someFunc(event) { 
    this.setState(
        {
            value: event.target.value
        },
        () => {                 
            this.props.onChange(this.state.value);    // <- this should work                
        }
    );
}

关于javascript - 如何将事件传递给 setState 回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826078/

相关文章:

javascript - 如何使用javascript调用body onunload上的多个函数?

javascript - 如何从 OpenWeatherMap API 获取数据信息 'dt'

javascript - Foreach,等待每次迭代直到收到响应(使js同步)

android - 如何在 Java 中执行 AsyncTask 子类?

javascript - 如何在提交和键入时验证表单

javascript - D3 : Resizing x axis and repositioning circles

javascript - 仅在 Tab 键时显示焦点轮廓,而不是在单击鼠标时显示焦点轮廓

reactjs - 从 react 应用程序读取 kubernetes pod 的 configmap 中设置的环境变量?

c - Swift 中的任意 C 回调包装器

javascript - 客户端文件大小结束格式验证。为什么 JS 会阻止文件上传?