【发布时间】:2021-04-28 04:26:13
【问题描述】:
我有一个 SnackBar.ts 文件如下
import { useSnackbar } from 'notistack';
const SnackBar = (message:string, isError?:boolean) => {
const { enqueueSnackbar } = useSnackbar();
return enqueueSnackbar(message, {
anchorOrigin: {
horizontal: 'right',
vertical: 'top'
},
variant: isError ? 'error' : 'success',
style: { whiteSpace: 'pre-line' }
});
};
export default SnackBar;
所以我开始在我的组件 tsx 中使用它,如下所示
import { FC, useEffect, useState } from 'react';
import { SnackBar } from '../../snackbar';
const userEditForm: FC = (props) => {
const mySnack = SnackBar;
useEffect(() => {
console.log('error');
if (!loading && submitForm) {
if (!error) {
mySnack('user updated');
} else {
mySnack(error, true);
}
}
}, [error, loading, submitForm]);
return ( <MyComponent /> );
}
我收到此错误“Error: Invalid hook call. Hooks can only be called inside of the body of a function component”
错误来自这一行mySnack('user updated');
我想要做的就是使用enqueueSnackbar 作为共享方法。
我怎样才能在打字稿中做到这一点?
【问题讨论】:
-
请附上minimal reproducible example。看起来您正在文件根目录调用钩子,这可以解释错误,还是只是一个不完整的示例?
标签: reactjs typescript react-hooks notistack