Fel*_*e V 4 reactjs material-ui
我有一个组件,它呈现带有图标和文本的 Material UI MenuItem:
export default class ProjectMenuItem extends Component {
render() {
return (
<MenuItem onClick={this.props.onClick}>
<ListItemIcon>{this.props.iconComponent}</ListItemIcon>
<ListItemText primary={this.props.text} />
</MenuItem>
);
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常。我正在努力理解的是为什么我会收到警告:无法为函数组件提供参考。尝试访问此引用将失败。 如果我将此组件更改为功能组件:
export const ProjectMenuItem = ({ onClick, iconComponent, text }) => {
return (
<MenuItem onClick={onClick}>
<ListItemIcon>{iconComponent}</ListItemIcon>
<ListItemText primary={text} />
</MenuItem>
);
};
Run Code Online (Sandbox Code Playgroud)
父组件:
<StyledMenu
id='customized-menu'
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}>
{projectMenuItens.map((menuItem, i) => (
<ProjectMenuItem
key={i}
onClick={menuItem.onClick}
text={menuItem.text}
iconComponent={menuItem.iconComponent}
/>
))}
</StyledMenu>
Run Code Online (Sandbox Code Playgroud)
完整的警告是:
警告:不能为函数组件提供引用。尝试访问此引用将失败。你的意思是使用 React.forwardRef() 吗?检查 的渲染方法
ForwardRef(Menu)。
小智 7
该StyledMenu组件尝试为您的ProjectMenuItem组件分配一个引用。Refs 不能用于函数组件,因为它们没有实例。您只能在类组件或 DOM 元素上使用它们。
如果你想ProjectMenuItem成为一个函数组件,使用 react 的React.forwardRef工具:
export const ProjectMenuItem = React.forwardRef(({onClick, iconComponent, text}, ref) => (
<MenuItem onClick={onClick} ref={ref}>
<ListItemIcon>{iconComponent}</ListItemIcon>
<ListItemText primary={text} />
</MenuItem>
));
Run Code Online (Sandbox Code Playgroud)
您可以在官方 react 文档中阅读有关 refs 的更多信息。
| 归档时间: |
|
| 查看次数: |
5107 次 |
| 最近记录: |