当使用react-router-navigation-prompt时,关于弃用的findDOMNode的警告提示

3
我正在使用react-router-navigation-prompt来在用户离开页面时显示模态窗口。它工作正常,但在更新我的依赖项后,我一直收到这个错误:findDOMNode 我尝试将ref转发给子组件,但似乎没有起作用。这是我的代码:
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>
  );
}

有什么想法可以解决这个问题吗?
1个回答

3

问题追踪参考:https://github.com/mui-org/material-ui/issues/13394
有几个选项:

  1. 部分禁用严格模式:<Dialog disableStrictModeCompat>
  2. 已转换为在@material-ui/core@^4.10中使用引用的不稳定主题
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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接