reactjs - 当属性发生变化时,React 会重新渲染整个组件

标签 reactjs

让我们考虑以下示例:

import React, {Component} from 'react';

class B extends Component {
  render() {
    console.log(`Render runs with ${this.props.paramA}`);
    return (<div>{this.props.paramA}</div> );
  }
}

class App extends Component {

  constructor() {
    super();
    this.state = {paramA: 'asd'};
  }

  handleChange(event) {
    this.setState({paramA: event.target.value});
  }

  render() {
    return (<div>
      <input value={this.state.paramA} onChange={e => this.handleChange(e)}/>
      <label>
      <B paramA={this.state.paramA}></B>
      </label>
    </div>);
  }
}

Here's the gif它是如何工作的。

如果您注意到,为了更新属性的更改,React 需要评估“render”方法。这会导致整个组件更新,而不是真正更改的一小部分(检查 gif,div 元素在 chrome 开发人员工具中闪烁):

TL;DR 根据 React 哲学,应用程序的编写方式应该具有尽可能多的 dummy组件尽可能。这意味着我们有时必须向下传递几个级别的属性(其他时候我们可以使用例如 redux),这会导致每次顶级组件的属性更改时都会评估许多 render 方法。话虽如此,我经常在现实生活中的 React 应用程序中看到,当例如用户在输入中输入一些内容。好吧,即使这是浏览器的“滞后”,我也不喜欢当组件只需要更新其一小部分时,React 重新评估所有组件(意味着运行它们的渲染方法)的想法。

问题: 难道我做错了什么?有没有办法实现 react 组件,以便它们只更新更改的内容?

最佳答案

听起来您正在寻找 shouldComponentUpdate生命周期 Hook 。

非常不言自明;如果组件只应在特定的 prop/state 更改下重新渲染,您可以在此钩子(Hook)中指定这些内容,否则返回 false。

关于reactjs - 当属性发生变化时,React 会重新渲染整个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185343/

相关文章:

javascript - 预期语法错误 : Unexpected token, }

javascript - React Hooks - 使用 useState 与仅使用变量

javascript - React - 加载外部脚本的问题

android - React Native Android 生产版本仍然像开发版本一样

javascript - 刷新未更改的内容

javascript - 如何将点击项目的索引移动到另一个不是父组件的组件?

javascript - Material UI v1 中选择组件中的错误

reactjs - React 路由器导航不起作用

javascript - React-js 无法识别 AmbientLightSensor

javascript - 如何以编程方式填充使用 React 构建的输入元素?