如何解决警告:React无法识别DOM元素上的X属性。

16 浏览
0 Comments

如何解决警告:React无法识别DOM元素上的X属性。

我正在使用一个叫做react-firebase-js的东西来处理firebase验证,但是我对react和提供者-消费者的理解有限。我首先建立了一个非常大的JSX顶层组件,没有警告地工作。但是当我尝试将其拆分成组件时,我得到了标题中显示的警告和一些其他警告。\n这个没有警告...\n

// 在App.js组件中
  render() {
    return (
        
logo {({ isSignedIn, user, providerId }) => { if (isSignedIn) { return ( // 已登录用户的界面 ); } else { if (this.state.confirmationResult) { return ( // 获取手机号码登录的界面 ); } else { return ( // 验证已发送的短信代码的界面 ); } } }}
); }

\n但是这个更好的设计,我认为,会产生错误/警告...\n

// 在App.js组件中
render() {
    return (
      
      
          
            您已通过身份验证
            
          
          
                // <-- 这是新组件
        
      
      
    );
  }
// 在我的全新Authenticator组件中...
  render() {
    return (
        
logo {({ isSignedIn, user, providerId }) => { if (isSignedIn) { return (
                            {JSON.stringify({ isSignedIn, user, providerId }, null, 2)}
                            

); } else { if (this.state.confirmationResult) { return ( // 获取手机号码登录的界面 ); } else { return ( // 验证已发送的短信代码的界面 ); } } }}

); } \n错误/警告看起来像这样...\n

\n[错误] 警告:React不能识别DOM元素上的isSignedIn属性。如果您有意将其作为DOM中的自定义属性显示,请将其拼写为小写的issignedin。如果您意外地从父组件传递了它,请将它从DOM元素中删除。\n[错误] 警告:React不能识别DOM元素上的providerId属性。如果您有意将其作为DOM中的自定义属性显示,请将其拼写为小写的providerid。如果您意外地从父组件传递了它,请将它从DOM元素中删除。\n[错误] 错误:无法加载外部reCAPTCHA依赖项!\n (匿名函数) (0.chunk.js:1216) [错误] 错误:您提供的错误不包含堆栈跟踪。\n

\n我是否对如何使用提供者-消费者有误解,还是react-firebase代码中有错误,还是我做了其他错误的事情?谢谢。

0
0 Comments

如何解决“警告:React在DOM元素上不认识X prop”问题

当你在组件上传递了一个无效的prop时,会触发这个警告。例如,以下代码会触发这个警告:

<Component someUnknownProp='random-text' />

为了消除这个警告,你需要找出这个警告是从哪里出现的。堆栈跟踪将给你一些暗示。

0
0 Comments

问题原因:styled-components升级到6+版本后,引入了一个破坏性的改变。

解决方法:在prop名称前加上$符号即可解决该问题。具体操作如下:

在.tsx文件中:


在.style.tsx文件中:

height: ${({ $offset }) => ($offset ? 'calc(100% + 20px)' : '100%')};

需要注意的是,这个解决方法在styled-components官方文档的transient-props部分有详细说明。

0
0 Comments

原因:在代码中,<FirebaseAuthProvider {...config} firebase={firebase}>这一行可能是问题的原因。config对象中包含了isSignedInproviderId字段,这些字段可能会被传递给子组件,最终传递给DOM元素。在传递之前,尝试将这些字段从对象中删除:const { providerId, isSignedIn, ...authProviderConfig } = config。这样,对象authProviderConfig将不再包含providerIdisSignedIn属性。更好的方法是,可以显式地重新构建配置对象,以避免进一步的混淆:const authProviderConfig = { /* config实际上需要的字段 */ }。同时,还应该检查FirebaseAuthProvider组件如何使用这些props,并避免将它们传递给DOM元素。

解决方法:删除config对象中的isSignedInproviderId字段,或者重新构建一个只包含需要字段的配置对象authProviderConfig。检查FirebaseAuthProvider组件,避免将这些props传递给DOM元素。

相关文档:https://reactjs.org/warnings/unknown-prop.html

0