Material UI - 提供给 ButtonBase 的 `component` 道具无效。请确保在此自定义组件中呈现 children 道具

Posted

技术标签:

【中文标题】Material UI - 提供给 ButtonBase 的 `component` 道具无效。请确保在此自定义组件中呈现 children 道具【英文标题】:Material UI - The `component` prop provided to ButtonBase is invalid. Please make sure the children prop is rendered in this custom component 【发布时间】:2021-08-11 14:52:30 【问题描述】:

提前为这个基本问题道歉,我不是一个强大的前端开发人员,我已经搜索了互联网。当我在 chrome 中检查我的前端应用程序时,我不断收到此错误。

(3) Material-UI:提供给 ButtonBase 的 component 属性是 无效的。请确保在此自定义中呈现 children 道具 组件。

为什么社交按钮标签会抛出此错误?

这里是代码...

import React, forwardRef from 'react';
import '../../styles/header.css';
import Link, useLocation from 'react-router-dom';
import Paper, Tabs, Tab from '@material-ui/core';
import Email, GitHub, LinkedIn from '@material-ui/icons';


const Header: React.FC = () => 
    const location = useLocation();

    const renderSocialButton = (link: string, children: JSX.Element): JSX.Element => (
        <a href=link> 
            children
        </a>
    );

    return (
        <Paper square>
            <Tabs
                value=location.pathname
                indicatorColor='primary'
                textColor='primary'
                aria-label='menu tabs'
                centered
            >   
                <Tab 
                    label='Home'
                    className='tab_nav'
                    component=Link
                    to='/'
                    value='/' 
                />
                <Tab 
                    label='About'
                    className='tab_nav'
                    component=Link
                    to='/about'
                    value='/about' 
                />
                <Tab 
                    label=''
                    className='space_nav'
                    disabled
                />
                <Tab 
                    component= forwardRef(() => 
                        renderSocialButton('https://example.com', <Email className='social_icon' />)
                    )
                />
                <Tab 
                    component= forwardRef(() => 
                        renderSocialButton('https://example.com', <GitHub className='social_icon' />)
                    )
                />
                <Tab 
                    component= forwardRef(() => 
                        renderSocialButton('https://example.com', <LinkedIn className='social_icon' />)
                    )
                />
            </Tabs>
        </Paper>
    );
;

export default Header;

【问题讨论】:

【参考方案1】:

我认为您遇到问题是因为您在 component 属性中传递函数的方式。

Material UI docs 建议您应该“避免使用内联函数,而是将静态组件传递给组件属性。”

例如。 (来自文档):

const CustomLink = React.useMemo(
    () =>
      React.forwardRef((linkProps, ref) => (
        <Link ref=ref to=to ...linkProps />
      )),
    [to],
  );

然后你可以在你的 component 属性中传递它,而不是函数。

【讨论】:

以上是关于Material UI - 提供给 ButtonBase 的 `component` 道具无效。请确保在此自定义组件中呈现 children 道具的主要内容,如果未能解决你的问题,请参考以下文章

index.js:1375 警告:Material-UI:提供给 Tabs 组件的 `/` 值无效。所有 Tabs 子项都没有此值

Material UI - 提供给 ButtonBase 的 `component` 道具无效。请确保在此自定义组件中呈现 children 道具

在 React Material UI Table 中创建动态操作列

Material-UI:提供的值“未定义”无效

Material-UI 滑块未将名称道具暴露给 Formik

Material UI 嵌套主题提供程序与Styles HOC 中断