当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;
答案 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.memo与React.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 频道。