当用户离开页面时,我正在使用react-router-navigation-prompt来显示模式窗口。它工作正常,但是更新我的依赖关系后,我不断收到此错误:
我尝试将ref转发给child组件,但是似乎没有用。这是我的代码:
import React from 'react';
import NavigationPrompt from 'react-router-navigation-prompt';
import { CancelChangesDialog } from './CancelChangesDialog';
import _ from 'lodash';
interface Props<T> {
currentForm: T;
initialForm: T;
}
export function LeavingPrompt<T>(props: Props<T>) {
const { currentForm, initialForm } = props;
return (
<NavigationPrompt when={!_.isEqual(currentForm, initialForm)}>
{({ onConfirm, onCancel }) => (
<CancelChangesDialog
open
handleCancel={onCancel}
handleConfirm={onConfirm}
/>
)}
</NavigationPrompt>
);
}
CancelChangesDialog是模式视图组件:
import React from 'react';
import {
Dialog,
DialogTitle,
DialogContent,
DialogContentText,
DialogActions,
Button,
} from '@material-ui/core';
interface Props {
open: boolean;
handleCancel(): void;
handleConfirm(): void;
}
export function CancelChangesDialog(props: Props) {
const { open, handleCancel, handleConfirm } = props;
return (
<Dialog open={open}>
<DialogTitle id="alert-dialog-title">{'Confirm changes'}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">
Changes are not saved! Leave anyway?
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleCancel} color="primary">
Cancel
</Button>
<Button
onClick={handleConfirm}
color="primary"
style={{ textTransform: 'initial' }}
autoFocus
>
Confirm
</Button>
</DialogActions>
</Dialog>
);
}
任何想法如何解决此问题?
答案 0 :(得分:1)
问题跟踪工具参考:https://github.com/mui-org/material-ui/issues/13394
有一些选项:
<Dialog disableStrictModeCompat>
import { ThemeProvider } from "@material-ui/core/styles";
import { unstable_createMuiStrictModeTheme } from "@material-ui/core/styles";
const theme = unstable_createMuiStrictModeTheme();
<ThemeProvider theme={theme}>
<Dialog>...</Dialog>
</ThemeProvider>
注意:请阅读有关不稳定主题的文档。有局限性。
修复的Codesandbox演示: https://codesandbox.io/s/practical-gould-j7pqu
在许多情况下,API允许用户传递自定义的根组件。如果这些组件不能正确转发其引用,我们仍然需要findDOMNode。