首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React.memo行为

React.memo行为
EN

Stack Overflow用户
提问于 2019-04-16 14:00:51
回答 1查看 1.3K关注 0票数 2

考虑以下简单的组件:

代码语言:javascript
复制
import React, { Fragment, memo } from 'react';

function Parent(props) {
  return (
    <Fragment>
      <Child {...props} />
      <Child foobar={props.foobar} />
    </Fragment>
  );
}

export default memo(Parent);
代码语言:javascript
复制
import React, { memo } from 'react';

function Child({ foobar }) {
  return (
    <p>{foobar}</p>
  );
}

export default memo(Child);

据我所理解,用React.memo()包装组件将确保它只有在其道具发生更改时才会重新呈现。

因此,除非传递给“父”的任何道具发生变化,否则该组件及其子代的整个谱系将不会被重新呈现。

但是,它的两个孩子呢?可以理解,如果"props.fooobar“发生变化,它们都将被重新呈现。但是如果"props.somethingElse“改变了呢?他们中的哪一个会在这里重新渲染?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 14:08:15

如果fooobar提供给Parent组件的另一个支柱发生了变化,那么Parent组件将被重新呈现,但是第一个Child组件也将被重新呈现,因为这是给父组件的所有支持,所以它的道具也会改变。

示例

代码语言:javascript
复制
const { memo, Fragment } = React;

const Parent = memo(props => {
  console.log("Rendered Parent");
  return (
    <Fragment>
      <Child {...props} />
      <Child foobar={props.foobar} />
    </Fragment>
  );
});

const Child = memo(({ foobar }) => {
  console.log("Rendered Child");
  return <p>{foobar}</p>;
});

class App extends React.Component {
  state = {
    foobar: "foo",
    bazqux: "baz"
  };

  componentDidMount() {
    setTimeout(() => this.setState({ foobar: "bar" }), 1000)
    setTimeout(() => this.setState({ bazqux: "qux" }), 2000)
  }

  render() {
    const { foobar, bazqux } = this.state;

    return <Parent foobar={foobar} bazqux={bazqux} />;
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55710036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档