我正在使用一个叫做 react-firebase-js 的东西来处理Firebase授权,但是我的React和提供者-消费者思想的理解有限。
起初,我在顶层构建了一个非常大的JSX组件,它能正常工作而没有警告。但是当我尝试将其拆分成组件时,我得到了标题中显示的警告和其他几个警告。
这样做没有警告...
// in App.js component
render() {
return (
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<FirebaseAuthConsumer>
{({ isSignedIn, user, providerId }) => {
if (isSignedIn) {
return (
// ui for signed in user
);
} else {
if (this.state.confirmationResult) {
return (
// ui to get a phone number sign in
);
} else {
return (
// ui to verify sms code that was sent
);
}
}
}}
</FirebaseAuthConsumer>
</header>
);
}
但是,我认为这种更好的设计会产生错误/警告...
// in App.js component
render() {
return (
<MuiThemeProvider>
<FirebaseAuthProvider {...config} firebase={firebase}>
<div className="App">
<IfFirebaseAuthed>
<p>You're authed buddy</p>
<RaisedButton label="Sign Out" onClick={this.signOutClick} />
</IfFirebaseAuthed>
<IfFirebaseUnAuthed>
<Authenticater /> // <-- this is the new component
</IfFirebaseUnAuthed>
</div>
</FirebaseAuthProvider>
</MuiThemeProvider>
);
}
// in my brand new Authenticator component...
render() {
return (
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<FirebaseAuthConsumer>
{({ isSignedIn, user, providerId }) => {
if (isSignedIn) {
return (
<div>
<pre style={{ height: 300, overflow: "auto" }}>
{JSON.stringify({ isSignedIn, user, providerId }, null, 2)}
</pre>
</div>
);
} else {
if (this.state.confirmationResult) {
return (
// ui to get a phone number sign in
);
} else {
return (
// ui to verify an sms code that was sent
);
}
}
}}
</FirebaseAuthConsumer>
</header>
);
}
错误/警告的样子如下...
[错误] 警告: React未能识别DOM元素上的
isSignedIn
属性。如果您有意将其显示为自定义属性,请将其拼写为小写的issignedin
。如果您意外地从父组件传递了它,请从DOM元素中删除它。[错误] 警告: React未能识别DOM元素上的
providerId
属性。如果您有意将其显示为自定义属性,请将其拼写为小写的providerid
。如果您意外地从父组件传递了它,请从DOM元素中删除它。[错误] 错误: 无法加载外部重CAPTCHA依赖项!(匿名函数) (0.chunk.js:1216) [错误] 错误: 您提供的错误不包含堆栈跟踪。
我是否误解了如何使用提供程序和消费者,还是react-firebase代码中存在错误,或者我做错了其他事情?谢谢。
{JSON.stringify({ isSignedIn, user, providerId }, null, 2)}
并检查错误是否仍在显示 - evgeni fotiaFirebaseAuthProvider
是如何实现的? - SomoKRoceSisSignedIn
和providerId
放在一个 DOM 元素上,像这样:<h3 isSignedIn={...}>stuff</h3>
。在 React 中,这是无效的。请搜索代码,查找所有使用isSignedIn
和providerId
的情况,并确保它们不直接放在 HTML 元素上,而需要是一个 React 组件。你可以在这里查看实际操作 https://codesandbox.io/s/o4kn2vqj4q。 - Sam Uherek