javascript - 调度和监听不同组件中的事件 - reactjs

标签 javascript reactjs

我正在尝试在一个组件中创建一个自定义事件并在另一个组件中添加一个事件监听器。监听事件的组件包含一个我想在事件上执行的函数。以下是我在这两个组件中的内容,我只是觉得我正在以错误的方式解决这个问题......

组件 #1

toggleWidget() {
   const event = new CustomEvent('sliderClicked', {
     bubbles: true,
   });
   const sliderToggle = document.getElementById('input');
   sliderToggle.dispatchEvent(event);

   this.setState({
     checked: !this.state.checked,
   });
}
  /* and then in my render... */

 render() {
   const displaySlider = this.state.isSliderDisplayed ? (
     <div className="slider-container" >
    <label className="switch" htmlFor="input">
      <input type="checkbox" checked={this.state.checked} onChange={this.toggleWidget} id="input" />
      <span className="slider round" />
    </label>
    <p className="batch-slider-title"> Batch Widget </p>
  </div>) : null;`

组件二

window.addEventListener('sliderClicked', this.refreshLayout);`

关于我可能做错了什么有什么想法吗?

最佳答案

基本上它应该可以工作,但是在 react 中 - 如果您在组件中渲染了一个元素,您可以使用 ref 来访问它:

<input
    type="checkbox"
    checked={this.state.checked}
    onChange={this.toggleWidget}
    id="input"
    ref={(c) => this.input = c}
/>

你的 toggleWidget 函数应该是这样的:

toggleWidget() {
    ...
    this.input.dispatchEvent(event);
    ...
}

关于javascript - 调度和监听不同组件中的事件 - reactjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825090/

相关文章:

javascript - 在 selectOneMenu 更改时在同一窗口中打开对话框

javascript - 如何在 materializecss 中更改 "Toasts"的位置

reactjs - 包含 useContext 钩子(Hook)会导致子级的 useState 重置为初始值

javascript - 一次只显示 3 个对象

javascript - 在孙子组件中通过 Link 管理路由

javascript - 如何在 react 中导入根路径之外的组件?

reactjs - React - 来自 API 的值不会出现在 View 中

javascript - 从 Keycloak 访问 token 获取客户端 session ID

javascript - foreach 具有多个函数异步

javascript - 在 AngularJS 应用程序中使用封装指令和路由的推荐方法是什么?