您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如果状态不变,无状态组件会重新渲染吗?

如果状态不变,无状态组件会重新渲染吗?

从React 16.6开始,您可以将React.memo用于功能组件以防止重新渲染,类似于PureComponent用于类组件:

const MyComponent = React.memo((props) => {
  return (
    /* markup */
  );
});
@H_419_9@

另外,备忘会进行内部优化

与userland memo()高阶组件实现不同,React内置的实现可以通过避免额外的组件层来提高效率。块引用


老答案

如果setState()组件本身或它的父组件之一被调用 ,因为功能性无状态组件不带有shouldComponentUpdate。实际上,除非实现,否则每个React组件都将被重新渲染1shouldComponentUpdate


需要注意的重要一点是, render() 。该render方法仅用于diff算法来确定需要真正附加/分离的DOM节点。 render() 。仅在render()返回不同的虚拟树时才执行它们。

从React的文档中

需要明确的是,在这种情况下,重新渲染意味着为所有组件调用render,但这并不意味着React会卸载并重新安装它们。它将仅按照前几节中所述的规则应用差异。

只是不用担心,render()除非您的组件很大,否则请调用它,然后最好使用有状态Component实现shouldComponentUpdate()

看看这里一个有趣的讨论。

1表示render()调用了组件的功能,而不是底层的DOM节点正在被操纵。

解决方法

我从React中学到的一件事是,如果组件的属性不变,那么React不会重新渲染组件。无状态组件也是如此吗?还是它们的行为更像“愚蠢的”函数,并且每次都会执行?

例如,如果我有:

import StatelessComponent from '../StatelessComponent';

export default class DocumentsTable extends React.Component {
  state = {
    something: 'foobar',};

  render() {
    return (
      <div>
        { this.state.something }
        <StatelessComponent theOnlyProp='baz'>
      </div>
    )
  }
};

this.state.something更新其价值,并<StatelessComponent>获取重新渲染?还是像其他React组件一样足够“聪明”地看到其道具没有改变?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
import StatelessComponent from '../StatelessComponent';

export default class DocumentsTable extends React.Component {
  state = {
    something: 'foobar',};

  render() {
    return (
      <div>
        { this.state.something }
        <StatelessComponent theOnlyProp='baz'>
      </div>
    )
  }
};

另外,备忘会进行内部优化

与userland memo()高阶组件实现不同,React内置的实现可以通过避免额外的组件层来提高效率。块引用

如果setState()组件本身或它的父组件之一被调用 ,因为功能性无状态组件不带有shouldComponentUpdate。实际上,除非实现,否则每个React组件都将被重新渲染1shouldComponentUpdate

需要注意的重要一点是, render() 。该render方法仅用于diff算法来确定需要真正附加/分离的DOM节点。 render() 。仅在render()返回不同的虚拟树时才执行它们。

从React的文档中

需要明确的是,在这种情况下,重新渲染意味着为所有组件调用render,但这并不意味着React会卸载并重新安装它们。它将仅按照前几节中所述的规则应用差异。

只是不用担心,render()除非您的组件很大,否则请调用它,然后最好使用有状态Component实现shouldComponentUpdate()

看看这里一个有趣的讨论。

1表示render()调用了组件的功能,而不是底层的DOM节点正在被操纵。

我从React中学到的一件事是,如果组件的属性不变,那么React不会重新渲染组件。无状态组件也是如此吗?还是它们的行为更像“愚蠢的”函数,并且每次都会执行?

例如,如果我有:

this.state.something更新其价值,并<StatelessComponent>获取重新渲染?还是像其他React组件一样足够“聪明”地看到其道具没有改变?

另外,备忘会进行内部优化

与userland memo()高阶组件实现不同,React内置的实现可以通过避免额外的组件层来提高效率。块引用

如果setState()组件本身或它的父组件之一被调用 ,因为功能性无状态组件不带有shouldComponentUpdate。实际上,除非实现,否则每个React组件都将被重新渲染1shouldComponentUpdate

需要注意的重要一点是, render() 。该render方法仅用于diff算法来确定需要真正附加/分离的DOM节点。 render() 。仅在render()返回不同的虚拟树时才执行它们。

从React的文档中

需要明确的是,在这种情况下,重新渲染意味着为所有组件调用render,但这并不意味着React会卸载并重新安装它们。它将仅按照前几节中所述的规则应用差异。

只是不用担心,render()除非您的组件很大,否则请调用它,然后最好使用有状态Component实现shouldComponentUpdate()

看看这里一个有趣的讨论。

1表示render()调用了组件的功能,而不是底层的DOM节点正在被操纵。

其他 2022/1/1 18:14:42 有488人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶