问题
I get '' findDOMNode is deprecated in StrictMode '' in my console when I click on the button that triggers drawer to open
This is the button component container , button component is named Sidenav
import Sidenav from './Sidenav';
function Header() {
return (
<div className="header">
<div>
<Sidenav />
</div>
</div>
</div>
);
}
export default Header;
This is the Sidenav component
import React, { useState } from 'react';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/core/styles';
import Drawer from '@material-ui/core/Drawer';
import List from '@material-ui/core/List';
import MenuRoundedIcon from '@material-ui/icons/MenuRounded';
//sidenav width and styles
const useStyles = makeStyles({
list: {
width: 200
},
fullList: {
width: 'auto'
}
});
function Sidenav() {
// Functionality for sidenav
const classes = useStyles();
const [ state, setState ] = useState({
right: false
});
const toggleDrawer = (anchor, open) => (event) => {
if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {
return;
}
setState({ ...state, [anchor]: open });
};
// Links go here
const list = (anchor) => (
<div
className={clsx(classes.list, {
[classes.fullList]: anchor === 'top' || anchor === 'bottom'
})}
role="presentation"
onClick={toggleDrawer(anchor, false)}
onKeyDown={toggleDrawer(anchor, false)}
>
<List>
{/* {[ 'Inbox', 'Starred', 'Send email', 'Drafts' ].map((text, index) => (
<ListItem button key={text}>
<ListItemIcon>{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}</ListItemIcon>
<ListItemText primary={text} />
</ListItem>
))} */}
</List>
{/* <Divider /> */}
<List>
{/* {[ 'All mail', 'Trash', 'Spam' ].map((text, index) => (
<ListItem button key={text}>
<ListItemIcon>{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}</ListItemIcon>
<ListItemText primary={text} />
</ListItem>
))} */}
</List>
</div>
);
return (
<div>
<button onClick={toggleDrawer('right', true)}>
<MenuRoundedIcon />
</button>
<Drawer anchor={'right'} open={state['right']} onClose={toggleDrawer('right', false)}>
{list('right')}
</Drawer>
</div>
);
}
export default Sidenav;
And this is the console error when Sidenav component is clicked as a button
Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of Transition which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here:
in div (created by Transition)
in Transition (created by ForwardRef(Fade))
in ForwardRef(Fade) (created by ForwardRef(Backdrop))
in ForwardRef(Backdrop) (created by WithStyles(ForwardRef(Backdrop)))
in WithStyles(ForwardRef(Backdrop)) (created by ForwardRef(Modal))
in div (created by ForwardRef(Modal))
in ForwardRef(Portal) (created by ForwardRef(Modal))
in ForwardRef(Modal) (created by ForwardRef(Drawer))
in ForwardRef(Drawer) (created by WithStyles(ForwardRef(Drawer)))
in WithStyles(ForwardRef(Drawer)) (at Sidenav.js:69)
in div (at Sidenav.js:65)
in Sidenav (at Header.js:37)
in div (at Header.js:36)
in div (at Header.js:11)
in div (at Header.js:10)
in Header (at App.js:10)
in div (at App.js:9)
in App (at src/index.js:9)
in StrictMode (at src/index.js:8)
How can I fix the console error ?
回答1:
The error is coming from material-ui
's Transition
component. Maybe they will fix it in the future but worry not you won't see this error in production. Still if you don't need the StrictMode
you can remove it from src/index.js
.
来源:https://stackoverflow.com/questions/61937037/how-can-i-fix-finddomnode-is-deprecated-in-strictmode-error