我正在使用一种叫做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-firebase代码有错误,还是我做错了其他事情?谢谢。
最佳答案
大概这条线一定是罪魁祸首:
<FirebaseAuthProvider {...config} firebase={firebase}>
您的
config
对象当前包含字段isSignedIn
和providerId
,并且您必须将这些字段发送给子组件,最后发送给DOM元素。尝试将这些字段从对象中删除,然后再向下发送它们:const { providerId, isSignedIn, ...authProviderConfig } = config
这样,您的对象
authProviderConfig
将不包含providerId
或isSignedIn
属性。更好的是,您可以显式重建配置对象,以避免进一步的困惑:
const authProviderConfig = { /* The fields from config FirebaseAuthProvider actually needs */ }
您还应该检查
FirebaseAuthProvider
组件,以查看其如何使用这些 Prop ,并避免将其传播到DOM元素中。相关文档:https://reactjs.org/warnings/unknown-prop.html