如何防止我的功能组件通过React备忘录或React钩子重新呈现?

时间:2019-03-01 14:45:11

标签: javascript reactjs ecmascript-6 react-hooks

hiddenLogo更改值时,组件将重新呈现。我希望此组件从不重新渲染,即使其道具发生了变化。对于类组件,我可以这样实现sCU:

shouldComponentUpdate() {
  return false;
}

但是有没有办法处理React挂钩/ React备忘录?

这是我的组件的样子:

import React, { useEffect } from 'react';
import PropTypes from 'prop-types';

import ConnectedSpringLogo from '../../containers/ConnectedSpringLogo';

import { Wrapper, InnerWrapper } from './styles';
import TitleBar from '../../components/TitleBar';

const propTypes = {
  showLogo: PropTypes.func.isRequired,
  hideLogo: PropTypes.func.isRequired,
  hiddenLogo: PropTypes.bool.isRequired
};

const Splash = ({ showLogo, hideLogo, hiddenLogo }) => {
  useEffect(() => {
    if (hiddenLogo) {
      console.log('Logo has been hidden');
    }
    else {
      showLogo();

      setTimeout(() => {
        hideLogo();
      }, 5000);
    }
  }, [hiddenLogo]);

  return (
    <Wrapper>
      <TitleBar />
      <InnerWrapper>
        <ConnectedSpringLogo size="100" />
      </InnerWrapper>
    </Wrapper>
  );
};

Splash.propTypes = propTypes;

export default Splash;

4 个答案:

答案 0 :(得分:7)

正如G.aziz所说,React.Memo的功能类似于纯组件。但是,您还可以通过向其传递一个定义为相等的函数来调整其行为。基本上,此函数为shouldComponentUpdate,不同之处在于,如果希望它渲染,则返回true。

const areEqual = (prevProps, nextProps) => true;

const MyComponent = React.memo(props => {
  return /*whatever jsx you like */
}, areEqual);

答案 1 :(得分:5)

React.memoReact.PureComponent

当您不希望对发现静态的组件进行更新时可以使用它,与PureCompoment相同

对于类组件:

class MyComponents extends React.PureCompoment {}

对于功能组件:

const Mycomponents = React.memo(props => {
  return <div> No updates on this component when rendering </div>;
});

因此,它只是使用React.memo

创建一个组件
  

要验证您的组件没有渲染,您可以   在反应HightlightUpdates中激活extension并检查您的components reaction   rendering

答案 2 :(得分:1)

我们只能使用memo来防止功能组件中的渲染,这仅出于优化目的。根据React文档:

  

此方法仅作为性能优化存在。不要依靠它来“阻止”渲染,因为这可能会导致错误。

答案 3 :(得分:0)

根据反应文档:- [https://reactjs.org/docs/react-api.html][1]

<块引用>

反应。备忘录是一个高阶组件。如果您的组件呈现 给定相同的 props 得到相同的结果,你可以将它包装在对 React 的调用中。 memo 在某些情况下通过记住结果来提高性能。 这意味着 React 将跳过渲染组件,并重用 最后呈现的结果。

为了实际理解,我遇到了这两个视频,如果您也想清楚概念,它们非常好,最好观看,这样可以节省您的时间。

免责声明:-这不是我的 YouTube 频道。