React 无法识别 DOM 元素上的 X 属性

Posted

技术标签:

【中文标题】React 无法识别 DOM 元素上的 X 属性【英文标题】:React does not recognize the X prop on a DOM element 【发布时间】:2021-11-19 09:02:10 【问题描述】:

我是初学者,我正在开发 react(gatsby、TS、样式化组件)项目。我收到此错误:

“React 无法识别 DOM 元素上的 isOpen 属性。如果您故意希望它作为自定义属性出现在 DOM 中,请将其拼写为小写 isopen。如果您不小心从父级传递了它组件,将其从 DOM 元素中移除。”

export const Navigation = () => 
      const [isNavigationOpen, setIsNavigationOpen] = useState(false);
      const  isTablet  = useQuery();
    
      const showNavbar = () => 
        setIsNavigationOpen((previousState) => !previousState);
      ;
    
      const renderElement = isTablet ? (
        <>
          <SvgStyled
            src='bars_icon'
            isOpen=isNavigationOpen
            onClick=showNavbar
          />
          <MobileNavigation isOpen=isNavigationOpen>
            NAVIGATION_DATA.map(( id, url, text ) => (
              <LinkMobile key=id to=url>
                <ExtraSmallParagraph>text</ExtraSmallParagraph>
              </LinkMobile>
            ))
          </MobileNavigation>
        </>
      ) : (
        <FlexWrapper>
          NAVIGATION_DATA.map(( id, url, text ) => (
            <LinkDekstop key=id to=url>
              <ExtraSmallParagraph>text</ExtraSmallParagraph>
            </LinkDekstop>
          ))
        </FlexWrapper>
      );
    
      return renderElement;
    ;

我确信我错过了一些基本的反应东西或其他东西。也许有人可以帮助我并解释这个错误的原因。

【问题讨论】:

您能否分享您问题中的SvgStyled 组件代码? const SvgStyled = styled(Svg)` transition: 0.3s;光标:指针; $( isOpen ) => isOpen && transform: rotate(90deg);; &:hover $( isOpen ) => isOpen ? transform: rotate(90deg);transform: scale(0.98);; `; 【参考方案1】:

发生这种情况是因为传递给样式化组件的所有道具随后也传递给了您正在设置样式的 DOM 元素。

您的组件可能如下所示:

const SvgStyled = styled(SVG)< isOpen: boolean >`
  // your CSS and logic referencing the `isOpen` prop
`;

要解决此问题,您需要重构样式化组件定义并仅将您想要的道具显式传递给正在设置样式的元素。使用匿名函数组件并解构你不想传递给 DOM 元素的道具,并传播其余的道具。这可确保 styled-components 为其创建 CSS 类的 className 属性被传递。

例子:

interface SvgStyledProps 
  className?: string,
  isOpen: boolean,


const SvgStyled = styled(( isOpen, ...props) => (
  <Svg ...props />
))<SvgStyledProps>`
  // your CSS and logic referencing the `isOpen` prop
`;

有关styled-components 的任何其他 Typescript 细节/警告,请参阅docs。

【讨论】:

以上是关于React 无法识别 DOM 元素上的 X 属性的主要内容,如果未能解决你的问题,请参考以下文章

React Router 中的“React 无法识别 DOM 元素上的道具”

React 无法识别 DOM 元素上的 `isActive` 属性 - styled-components

React 包装器:React 无法识别 DOM 元素上的 `staticContext` 道具

React 包装器:React 无法识别 DOM 元素上的 `staticContext` 道具

Styled-components:React 无法识别 DOM 元素上的 `lineHeight` 道具

react ref 总结