Одним из преимуществ возможности использования shouldComponentUpdate
в компоненте класса React является возможность управлять рендерингом на основе условия, а не просто изменением значений состояния / проп.
Каков предпочтительный способ сделать эту оптимизацию с использованием ловушек реагирования в компоненте функции?
В приведенном ниже примере компонент класса не выполняет повторную визуализацию, если он находится (или находится) в закрытом состоянии, даже если у него есть новые дочерние элементы.
class DrawerComponent extends React.Component {
static propTypes = {
children: PropTypes.any,
}
state = {
isOpen: false,
}
// only re-render if the drawer is open or is about to be open.
shouldComponentUpdate(nextProps, nextState) {
return this.state.isOpen || nextState.isOpen;
}
toggleDrawer = () => {
this.setState({isOpen: !this.state.isOpen});
};
render() {
return (
<>
<div onClick={this.toggleDrawer}>
Drawer Title
</div>
<div>
{this.state.isOpen ? this.props.children : null}
</div>
</>
)
}
}
Аналог компонента функции (без оптимизации):
function DrawerComponent({ children }) {
const [isOpen, setIsOpen] = useState(false);
function toggle() {
setIsOpen(!isOpen);
}
return (
<>
<div onClick={toggle}>
Drawer Title
</div>
<div>{isOpen ? children : null}</div>
</>
);
}