javascript - 为多个子组件或简单的父组件添加事件监听器

标签 javascript reactjs dom-events addeventlistener

我有一个渲染多个子组件的父组件。这些子组件中的每一个都应该在每个窗口大小调整事件中重新呈现自己。

我想知道是否更好的 React 实践:

  1. 将事件监听器附加到每个子组件中的 componentDidMount,因为监听此事件是子组件的责任。
  2. 将单个事件监听器附加到父组件的 componentDidMount,并在该事件触发时强制其子组件重新渲染。

从性能的 Angular 来看,我认为 #2 更好,但从 React 方法的 Angular 来看,我认为 #1 更好。想法?

最佳答案

React 的默认行为是在每次更改组件(及其子组件)的状态或属性时重新渲染组件。

this.setState({isResized: true}); //trigger the rendering

您不必处理每个子组件内部的大小调整,只需在父组件中处理窗口大小调整(也许可以进行适当的去抖以提高性能)并设置一个状态,子组件将被重新渲染无需任何额外代码。

类似的东西应该有效

class ParentComponent extends Component{

 resizeCallback(e){
  this.setState({'isResized', true}); //re-render even MyChildComponent
 }
 componentDidMount(){
   window.addEventListener('resize', this.resizeCallback);
   //alternatively with underscorejs debounce
   //window.addEventListener("resize", _.debounce(this.resizeCallback, 300));
 }
 componentWillUnmount(){
   window.removeEventListener('resize', this.resizeCallback);
 }
 render(){
   <div>
     <MyChildComponent/>
   </div>
 }
}

关于javascript - 为多个子组件或简单的父组件添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650521/

相关文章:

javascript - Ajax加载本地json文件

javascript - 替换状态数组中的项目

javascript - 通过JS打开 "Inspect Element"窗口

javascript - eslint 为什么我的插件显示未找到规则定义?

javascript - 使用 Jquery 动态加载新内容

javascript - BackboneJS Turbolinks 历史问题

javascript - 用户在网页 + Iframe 上花费的时间

ajax - Set State in Ajax Call Back throws error : Warning: setState(. ..): Can only update a mounted or mounting 错误信息

javascript - 在 JavaScript onClick 事件处理程序中转义双引号

javascript - 我应该在我的 Javascript 游戏引擎中使用 DOM 片段作为 Shadow dom 吗?