【发布时间】:2019-02-02 11:59:17
【问题描述】:
我目前正在关注 Robin Wieruch 所著的“与 Firebase 反应之路”一书。我遇到的问题是,当我刷新使用 Context API 的页面时,来自 Firebase 的 authUser 变为 null。
这是我的 app.js
import Navigation from './Navigation';
import LandingPage from './Landing';
import AccountPage from './Account';
import withAuthentication from './withAuthentication';
import * as routes from '../constants/routes';
const App = () =>
<Router>
<div>
<h3 className="alt-h3" style={{textAlign: "center"}}>Soundyladder</h3>
<Navigation />
<hr/>
<Route
exact path={routes.LANDING}
component={LandingPage}
/>
<Route
exact path={routes.ACCOUNT}
component={AccountPage}
/>
</div>
</Router>
export default withAuthentication(App);
如您所见,app.js 使用的是高阶组件。
withAuthentication.js:
import AuthUserContext from './AuthUserContext';
const withAuthentication = (Component) => {
class withAutnetication extends React.Component {
constructor(props) {
super(props);
this.state = {
authUser: null
};
}
componentDidMount() {
firebase.auth.onAuthStateChanged(authUser => {
authUser != null ? this.setState({ authUser }) : this.setState({ authUser: null });
});
}
render() {
const { authUser } = this.state;
console.log(this.state);
return (
<AuthUserContext.Provider value={authUser}>
<Component { ...this.props } />
</AuthUserContext.Provider>
)
}
}
return withAutnetication;
}
export default withAuthentication;
正如您在此处看到的,我提供了 Context API,以便 App.js 下的每个组件都可以使用它。
这里是 AuthUserContext:
import React from 'react';
const AuthUserContext = React.createContext(null);
export default AuthUserContext;
问题是当我访问账户页面,然后刷新页面时,authUser变成了null。
Account.js:
const AccountPage = () =>
<AuthUserContext.Consumer>
{authUser =>
<div>
<h1>Account: {authUser.email}</h1>
<PasswordForgetForm />
<PasswordChangeForm />
</div>
}
</AuthUserContext.Consumer>
export default AccountPage;
但是,当我在 LandingPage 并刷新页面时,authUser 不会变为 null。
这是我的登陆页面:
const LandingPage = () =>
<div>
<h1>Landing Page</h1>
</div>
export default LandingPage;
但是,如果我尝试在登录页面中使用 Context API 中的 authUser,就像我在帐户页面中所做的那样,我会收到相同的错误:authUser 变为 null。
Context API 好像有问题?
【问题讨论】:
标签: javascript reactjs firebase firebase-authentication