Вы обычно делаете это, передавая опору, а не вызывая метод непосредственно в компоненте:
const Modal = ({
isVisible,
}) => {
useEffect(() => {
console.log(`The modal has been ${ isVisible ? 'opened' : 'closed' }.`);
}, [isVisible]);
return (
<div className={ cx({ ['isVisible']: isVisible }) }>...</div>
);
}
const App = () => {
const [isModalVisible, setIsModalVisible] = useState(false);
const handleButtonClick = useCallback(() => {
// Toggle the `isModalVisible` value:
setIsModalVisible(prevIsModalVisible => !prevIsModalVisible);
}, []);
return (
<div>
<Modal isVisible={ isModalVisible } />
<button onClick={ handleButtonClick }>
{ isModalVisible ? 'Close' : 'Open'} Modal
</button>
</div>
)
};