如何解决警告:React无法识别DOM元素上的X属性。
如何解决警告:React无法识别DOM元素上的X属性。
我正在使用一个叫做react-firebase-js的东西来处理firebase验证,但是我对react和提供者-消费者的理解有限。我首先建立了一个非常大的JSX顶层组件,没有警告地工作。但是当我尝试将其拆分成组件时,我得到了标题中显示的警告和一些其他警告。\n这个没有警告...\n
// 在App.js组件中 render() { return (); } {({ isSignedIn, user, providerId }) => { if (isSignedIn) { return ( // 已登录用户的界面 ); } else { if (this.state.confirmationResult) { return ( // 获取手机号码登录的界面 ); } else { return ( // 验证已发送的短信代码的界面 ); } } }}
\n但是这个更好的设计,我认为,会产生错误/警告...\n
// 在App.js组件中 render() { return (); } // 在我的全新Authenticator组件中... render() { return ( 您已通过身份验证 // <-- 这是新组件 {({ 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代码中有错误,还是我做了其他错误的事情?谢谢。
问题原因:styled-components升级到6+版本后,引入了一个破坏性的改变。
解决方法:在prop名称前加上$符号即可解决该问题。具体操作如下:
在.tsx文件中:
在.style.tsx文件中:
height: ${({ $offset }) => ($offset ? 'calc(100% + 20px)' : '100%')};
需要注意的是,这个解决方法在styled-components官方文档的transient-props部分有详细说明。
原因:在代码中,<FirebaseAuthProvider {...config} firebase={firebase}>
这一行可能是问题的原因。config对象中包含了isSignedIn
和providerId
字段,这些字段可能会被传递给子组件,最终传递给DOM元素。在传递之前,尝试将这些字段从对象中删除:const { providerId, isSignedIn, ...authProviderConfig } = config
。这样,对象authProviderConfig
将不再包含providerId
或isSignedIn
属性。更好的方法是,可以显式地重新构建配置对象,以避免进一步的混淆:const authProviderConfig = { /* config实际上需要的字段 */ }
。同时,还应该检查FirebaseAuthProvider
组件如何使用这些props,并避免将它们传递给DOM元素。
解决方法:删除config
对象中的isSignedIn
和providerId
字段,或者重新构建一个只包含需要字段的配置对象authProviderConfig
。检查FirebaseAuthProvider
组件,避免将这些props传递给DOM元素。