开发者问题收集

是什么原因导致 notistack 出现此排队 snackbar 错误?

2020-09-05
18342

我正在尝试使用 notistack 库中的 useSnack 钩子,但我一直收到此错误

TypeError: Cannot destructure property 'enqueueSnackbar' of 'Object(...)(...)' as it is undefined.

这是代码:

import React, { useContext, useEffect } from "react";
import AlertContext from "../context/alert/alertContext";
import { SnackbarProvider, useSnackbar } from "notistack";

const Alerts = (props) => {
  const alertContext = useContext(AlertContext);
  // This line below is where the error seems to be
  const { enqueueSnackbar } = useSnackbar();
  useEffect(() => {
    alertContext.msg !== "" &&
      enqueueSnackbar(alertContext.msg, {
        variant: alertContext.type,
      });
  }, [alertContext]);
  return <SnackbarProvider maxSnack={4}>{props.children}</SnackbarProvider>;
};

export default Alerts;
2个回答

useSnackbar 钩子可从 SnackbarProvider 的树中的任何位置访问。

因此,您不能在与 SnackbarProvier 相同的组件中使用它。

import AlertContext from "../context/alert/alertContext";
import { SnackbarProvider } from "notistack";

const Alerts = (props) => {
  const alertContext = useContext(AlertContext);
  const providerRef = React.useRef();

  useEffect(() => {
    alertContext.msg !== "" &&
      providerRef.current.enqueueSnackbar(alertContext.msg, {
        variant: alertContext.type,
      });
  }, [alertContext]);
  return <SnackbarProvider ref={providerRef} maxSnack={4}>
       {props.children}
       </SnackbarProvider>;
};

export default Alerts;
Hossein Dehnokhalaji
2020-09-05

使用 SnapBar 提供程序包装您的索引文件:

index.js

import { SnackbarProvider } from "notistack";

const Index = () => (
    <SnackbarProvider maxSnack={1} preventDuplicate>
        index
    </SnackbarProvider>
)

export default Index

jsx 文件

import { useSnackbar } from "notistack";

const Logs = () => {
    const { enqueueSnackbar } = useSnackbar();

    const handler = () => {
        enqueueSnackbar(`Successful.`, { variant: "success" });
    };

    return <span onClick={handler}>"Logs loading"</span>;
};

export default Logs;
Chukwuemeka Maduekwe
2021-07-11