reactjs - HOC 每次都被渲染
问题描述
const withSnackbar = (WrappedComponent: React.FunctionComponent<any>): React.FunctionComponent<any> => {
const LoadedWrappedComponent = (props: any): ReactElement<any> => {
const classes = useStyles();
const theme = useTheme();
const [open, setOpen] = useState(false);
const [messageData, setMessageData] = useState<IMessageData>({
message: '',
severityType: 'info',
duration: 2000,
vertical: 'bottom',
horizontal: 'right',
});
const showMessage = ({
message,
severityType,
vertical = 'bottom',
horizontal = 'right',
duration = 2000,
}: IMessageData): void => {
setMessageData({
message,
severityType,
duration: horizontal === 'left' ? 5000 : duration,
vertical,
horizontal: theme.direction === 'ltr' ? 'right' : 'left',
});
setOpen(true);
};
const handleClose = (): void => {
setOpen(false);
};
const { message, severityType, duration, horizontal, vertical } = messageData;
return (
<>
<WrappedComponent {...props} showToastMessage={showMessage} />
<Snackbar
anchorOrigin={{
vertical,
horizontal,
}}
autoHideDuration={duration}
open={open}
onClose={handleClose}
TransitionComponent={Slide}
>
<Alert
classes={{
root: classes.root,
}}
variant='filled'
severity={severityType}
action={
horizontal === 'right' ? (
<IconButton>
<Icon src='CloseOutlined' onClick={handleClose} />
</IconButton>
) : (
<></>
)
}
>
{message}
</Alert>
</Snackbar>
</>
);
};
return LoadedWrappedComponent;
};
export default withSnackbar;
**当我关闭 toast 消息但页面被重新渲染时,我的页面组件也在 HOC 的帮助下从 json 模板渲染.. 以及当我发送一些成功消息或任何减速器时的 api 调用之后.. 我的整个模板页面也重新渲染
- 试过备忘录没有运气。
- 试过渲染道具没有运气**
解决方案
推荐阅读
- swift - 无法确定以下 Pod 错误的 Swift 版本
- java - Mockito thenReturn 不起作用,返回 Null
- django-login - 登录 django 后不出现注销按钮
- r - 是否有用于以下数据整理和转换的 R 代码
- java - Java 和 Espresso - 无法输入,需要支持输入法或可从类分配:类 SearchView
- sql - 会感谢一些对复杂子查询的 SQL 查询的帮助
- linux - docker 容器无法看到共享卷中的数据
- c++ - 无法理解头文件中的静态(内联)
- ios - VC销毁时UIView中存储的静态值不会被删除
- postgresql - chmod:更改“/var/lib/postgresql/data”的权限:不允许操作