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?是的,您可以这样做。您可以在“关闭”选项卡上卸载前侦听