j.d*_*doe 10 javascript ecmascript-6 reactjs react-hooks
当hiddenLogo
改变值时,组件被重新呈现。我希望此组件永远不会重新渲染,即使其道具发生了变化。使用类组件,我可以这样实现sCU:
shouldComponentUpdate() {
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法处理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;
Run Code Online (Sandbox Code Playgroud)
Nic*_*wer 15
正如G.aziz所说,React.Memo的功能类似于纯组件。但是,您还可以通过向其传递一个定义为相等的函数来调整其行为。基本上,这个功能shouldComponentUpdate,如果你想让它,除非你还真不渲染。
const areEqual = (prevProps, nextProps) => true;
const MyComponent = React.memo(props => {
return /*whatever jsx you like */
}, areEqual);
Run Code Online (Sandbox Code Playgroud)
React.memo和React.PureComponent一样
如果您不希望对发现静态的组件进行更新,则可以使用它,与 PureCompoment
对于类组件:
class MyComponents extends React.PureCompoment {}
Run Code Online (Sandbox Code Playgroud)
对于功能组件:
const Mycomponents = React.memo(props => {
return <div> No updates on this component when rendering </div>;
});
Run Code Online (Sandbox Code Playgroud)
所以它只是用 React.memo
要验证您的组件没有渲染,您可以
HightlightUpdates
在react中激活extension
并检查您components reaction
的rendering
归档时间: |
|
查看次数: |
4457 次 |
最近记录: |