Javascript 从React组件返回时如何获得通知?
我们有这个组件。如何在组件卸载或消失时获得通知Javascript 从React组件返回时如何获得通知?,javascript,reactjs,Javascript,Reactjs,我们有这个组件。如何在组件卸载或消失时获得通知 function EventTime(props) { const match = useRouteMatch(); const eventTime = findEventTime(match.params.eventTimeId); const eventTimeId = match.params.eventTimeId; const pageId = getId(undefined, eventTimeId, true, fal
function EventTime(props) {
const match = useRouteMatch();
const eventTime = findEventTime(match.params.eventTimeId);
const eventTimeId = match.params.eventTimeId;
const pageId = getId(undefined, eventTimeId, true, false);
const eventId = getId(undefined, eventTimeId, false, true);
const [
enableSellingTicketForEventTime,
setEnableSellingTicketForEventTime
] = useState(eventTime.enableSellingTicketForEventTime);
const [additionalNotesOnMyTicket, setAdditionalNotesOnMyTicket] = useState(
""
);
const changeAdditionalNotesOnMyTicket = event => {
setAdditionalNotesOnMyTicket(event.target.value);
};
const handleSwitchItem = () => {
setEnableSellingTicketForEventTime(!enableSellingTicketForEventTime);
};
const updateAdditionalNotesOnMyTicket = () => {
update({
pageId,
eventId,
eventTimeId,
additionalNotesOnMyTicket
}).then(data => {
const managedPages = JSON.parse(localStorage.getItem("managedPages"));
const index = managedPages.findIndex(
managedPage => managedPage.id === pageId
);
managedPages[index].events[eventId].eventTimes[
eventTimeId
].additionalNotesOnMyTicket = additionalNotesOnMyTicket;
localStorage.setItem("managedPages", JSON.stringify(managedPages));
console.log(JSON.parse(localStorage.getItem("managedPages")));
});
};
console.log(eventTime);
return (
<div>
<List>
{page().permission === "admin" && (
<Link
to={`/eventTimeLocationSelector/${match.params.eventTimeId}`}
style={{ textDecoration: "none", color: "black" }}
>
<NavigationItem
primary="Location"
secondary={
eventTime.locationId
? getLocationName(eventTime.locationId)
: ""
}
/>
</Link>
)}
{page().permission === "admin" && page().auditoriums && (
<Link
to={`/eventTimeAuditoriumSelector/${match.params.eventTimeId}`}
style={{ textDecoration: "none", color: "black" }}
>
<NavigationItem
primary="Auditorium"
secondary={
eventTime.auditoriumId
? getAuditoriumName(eventTime.auditoriumId)
: ""
}
/>
</Link>
)}
{page().permission !== "validateTicket" && (
<SwitchItem
primary="Enable selling ticket for event time"
checked={enableSellingTicketForEventTime}
change={handleSwitchItem}
default={false}
/>
)}
<Link
to={`/eventTimeTransactions/${match.params.eventTimeId}`}
style={{ textDecoration: "none", color: "black" }}
>
<NavigationItem primary="Sold tickets" />
</Link>
<TextFieldItem
primary="Additional notes on my ticket"
value={additionalNotesOnMyTicket}
onChange={changeAdditionalNotesOnMyTicket}
onBlur={updateAdditionalNotesOnMyTicket}
/>
</List>
{page().permission !== "validateTicket" &&
page().permission !== "teacher" && (
<Box style={{ display: "flex", justifyContent: "flex-end" }} mr={2}>
<Button variant="contained" color="primary">
Add person
</Button>
</Box>
)}
功能事件时间(道具){
const match=useRouteMatch();
const eventTime=findEventTime(match.params.eventTimeId);
const eventTimeId=match.params.eventTimeId;
const pageId=getId(未定义,eventTimeId,true,false);
const eventId=getId(未定义,eventTimeId,false,true);
常数[
启用SellingTicketForeventTime,
设置启用SellingTicketForEventTime
]=使用状态(eventTime.enableSellingTicketForEventTime);
const[additionalNotesOnMyTicket,setAdditionalNotesOnMyTicket]=useState(
""
);
const changeAdditionalNotesOnMyTicket=事件=>{
setAdditionalNotesOnMyTicket(event.target.value);
};
常量handleSwitchItem=()=>{
设置enableSellingTicketForEventTime(!enableSellingTicketForEventTime);
};
const updateAdditionalNotesOnMyTicket=()=>{
更新({
pageId,
eventId,
eventTimeId,
我的票上的附加说明
})。然后(数据=>{
const managedPages=JSON.parse(localStorage.getItem(“managedPages”);
const index=managedPages.findIndex(
managedPage=>managedPage.id==pageId
);
managedPages[index]。事件[eventId]。事件时间[
事件时间ID
].additionalNotesOnMyTicket=additionalNotesOnMyTicket;
setItem(“managedPages”,JSON.stringify(managedPages));
log(JSON.parse(localStorage.getItem(“managedPages”));
});
};
console.log(eventTime);
返回(
{page().permission==“admin”&&(
)}
{page().permission==“admin”和&page().auditorium和&(
)}
{page().permission!==“validatecket”&&(
)}
{page().权限!==“ValidateCite”&&
page().权限!==“教师”&&(
添加人
)}
在使用钩子时,可以使用useffect
hook
从“react”导入{useffect};
现在,在你的内部组件
useffect(()=>{
return()=>{
//组件卸载时在此处执行某些操作
}
}, [])
在此处查看有关useffect
的更多信息:
您可以这样使用。您可以声明在组件卸载时调用的函数作为
useffect()
的钩子返回值。请检查以下内容:componentDidMount(){window.addEventListener('mousemove',()=>{}})componentWillUnmount(){window.removeEventListener('mousemove',()=>{}})上述代码的钩子等价物如下useffect(()=>{window.addEventListener('mousemove',()=>{});//将在组件卸载返回时调用返回函数()=>{window.removeEventListener('mousemove',()=>{}},[]))您好!奇怪的是,如果我输入useffect
方法并在方法中输入断点,useffect
将不会被调用,如果我按浏览器中的“后退”按钮,它将不会以这种方式工作。useffect仅在通过代码卸载组件时运行。因此我需要使用窗口。addEventListener
和<代码>窗口。在useffect
中移除EventListener?是的,您可以这样做。您可以在“关闭”选项卡上卸载前侦听。