У меня есть компонент оповещения, который по умолчанию невидим, и когда что-то происходит (например, щелчок) в родительском компоненте, компонент оповещения будет виден. Внутри компонента оповещения есть кнопка закрытия, чтобы сделать компонент снова невидимым. Я новичок, чтобы реагировать, и я нашел это довольно трудно реализовать.
Вот мое текущее решение:
Компонент предупреждения:
import React, {useEffect, useState} from "react";
const Alert = ({show, style, message}) => {
const [visibility, setVisibility] = useState(show);
useEffect(() => {
setVisibility(show);
},[show]);
return (
<>
{(visibility)?(
<div className="col">
<div className={"alert shadow alert-"+style} role="alert">
{message}
<button type="button" className="close" aria-label="Close" onClick={(e) => {
setVisibility(false);
}}>
<span aria-hidden="true">×</span>
</button>
</div>
</div>
):(<></>)}
</>
);
}
export default Alert;
Родительский компонент имеетсостояние для управления им.
const [alert, setAlert] = useState({
'show': false,
'style':'',
'message':''
});
<Alert show={alert.show} style={alert.style} message={alert.message} />
<button onClick={(e) => {
setAlert({
'show':false,
'style':'',
'message':''
});
setAlert({
'show':true,
'style':'success',
'message':'Thank you!'
});
}>
show
</button>
Проблема заключается в том, что пропеллер show
не изменяется при нажатии на кнопку закрытия внутри компонента оповещения, когда я нажимаю на кнопку в родительском компонентесвойство show
по-прежнему true
, поэтому оно не будет отображать компонент оповещения. Обходной путь, который я использую, - установить для свойства prop show
значение false, а затем снова установить значение true
. Это не очень аккуратно. Есть ли лучший способ объединить опору и состояние, чтобы определить видимость предупреждения?