【发布时间】:2017-01-13 07:55:03
【问题描述】:
我正在使用 webpack 构建一个 React + Redux + Firebase 应用程序,并试图找出处理受保护路由和重定向的最佳方法。我尝试过将onEnter() 与setTimeout() 一起使用,就像许多示例所示,但它仍然在重定向之前闪烁备用组件。
这是我目前拥有的,我正在尝试提出一个更优雅的解决方案。这主要是有效的,但是如果我在/profile 上并在浏览器中导航到/,则失败的一个例子。似乎因为firebase.auth() 需要再次初始化,所以在切换到Profile 之前,我得到了HomePage 组件的闪光。
Firebase 在firebaseClientConfig 中初始化,我将firebase.auth() 传递给routes。
import { auth } from './firebaseClientConfig';
...
export default (
<Route path="/" component={App}>
<IndexRoute
getComponent={(nextState, cb) => {
auth.onAuthStateChanged((user) => {
if (!user) {
return require.ensure([], require => {
cb(null, require('./components/HomePage').default);
});
} else {
return require.ensure([], require => {
cb(null, require('./modules/Profile/Profile').default);
});
}
});
}}
/>
<Route
path="/profile"
getComponent={(nextState, cb) => {
auth.onAuthStateChanged((user) => {
if (user) {
return require.ensure([], require => {
cb(null, require('./modules/Profile/Profile').default);
});
} else {
return require.ensure([], require => {
cb(null, require('./modules/Login/Login').default);
});
}
});
}}
/>
</Route>
);
有人有更好的方法吗?
【问题讨论】:
-
这很优雅,不错!
-
@Bonitis 我听说 redux 不适合 firebase
-
@Ezeewei 他们实际上合作得很好!这个问题已经过时了,因为 react-router 已经从 v3 -> v4 走了,所以有很大的变化。总的来说,我对 redux+firebase 没有任何问题。
-
@Bonitis 不错!这是一个非常好的消息,我自己正在犹豫将它们整合在一起。谢谢!
标签: javascript reactjs firebase react-router firebase-authentication