react mui dialog组件中使用TextField 输入时闪屏
时间: 2024-05-09 20:14:55 浏览: 228
这个问题可能是由于 Dialog 组件中的 TextField 组件的焦点问题导致的。你可以尝试在 Dialog 组件中的 TextField 上添加 autoFocus 属性来解决这个问题,例如:
```jsx
<Dialog open={open}>
<DialogTitle>Enter your name</DialogTitle>
<DialogContent>
<TextField autoFocus margin="dense" label="Name" type="text" />
</DialogContent>
<DialogActions>
<Button onClick={handleClose}>Cancel</Button>
<Button onClick={handleSave}>Save</Button>
</DialogActions>
</Dialog>
```
如果这个方法不起作用,你可以尝试使用 useLayoutEffect 钩子来延迟渲染 TextField 组件。例如:
```jsx
import React, { useState, useLayoutEffect } from 'react';
import { Dialog, DialogTitle, DialogContent, TextField, DialogActions, Button } from '@material-ui/core';
function MyDialog() {
const [open, setOpen] = useState(false);
useLayoutEffect(() => {
if (open) {
document.querySelector('.MuiDialog-root .MuiInputBase-input').focus();
}
}, [open]);
const handleOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const handleSave = () => {
// your save logic
setOpen(false);
};
return (
<>
<Button onClick={handleOpen}>Open Dialog</Button>
<Dialog open={open}>
<DialogTitle>Enter your name</DialogTitle>
<DialogContent>
<TextField margin="dense" label="Name" type="text" />
</DialogContent>
<DialogActions>
<Button onClick={handleClose}>Cancel</Button>
<Button onClick={handleSave}>Save</Button>
</DialogActions>
</Dialog>
</>
);
}
```
这将在 Dialog 组件打开时使用 DOM API 来获取 TextField 组件并将焦点设置在输入框上。
阅读全文