【发布时间】:2017-04-20 22:22:21
【问题描述】:
考虑以下代码:
/**
* OTHER IMPORTS...
*/
import React, {Component} from 'react';
import {connect, Provider} from 'react-redux';
import {createStore, applyMiddleware, combineReducers, compose} from 'redux';
import firebase from 'firebase';
/**
* Connected Router - Flux Router with Connected Redux
*/
const ReduxRouter = connect()(Router);
class MyApp extends Component {
// Many Methods
/**
*
*/
componentWillMount () {
firebase.initializeApp({});
firebase.auth().onAuthStateChanged(this.onAuthStateChangedCallback.bind(this));
if (!this.reducers) {
this.reducers = combineReducers({
... // Many Reducers for other Scenes
});
}
if (!this.store) {
this.store = compose(applyMiddleware(ReduxThunk))(createStore)(this.reducers);
}
}
/**
*
*/
onAuthStateChangedCallback (user) {
if (user) {
/*
// TODO DISPATCH <------ Here is my problem
dispatch({
type: 'LOGGED',
payload: user
});
*/
Actions.First();
} else {
this.setState({
isLoading: false,
loggedIn: false
});
Actions.LogIn();
}
}
render () {
return (
<Provider store={this.store}>
<ReduxRouter sceneStyle={{paddingTop: 0, backgroundColor: '#FFFFFF'}}>
<Scene key="Menu" component={MenuScene} open={false} type={ActionConst.REPLACE} passProps>
{/* MANY OTHERS SCENES */}
<Scene key="First" title="First" type={ActionConst.REPLACE} component={FirstScene} passProps />
<Scene key="LogIn" title="LogIn" type={ActionConst.REPLACE} component={LogInScene} passProps />
</Scene>
</ReduxRouter>
</Provider>
);
}
}
export default MyApp
我在“菜单”中的所有场景,包括它都是连接组件
const mapStateToProps = (state) => {
return {
...state.First
};
};
export default connect(mapStateToProps, {
... // Actions
})(First);
我决定在主组件中设置 firebase auth 回调。有一种情况,我需要调度一些动作,以便我的所有场景都读取在这种情况下应该调度的数据。
那么,问题来了:有没有办法在连接组件之外调用调度,或者是连接“MyApp”组件的最佳方式?
【问题讨论】:
标签: firebase react-native redux firebase-authentication react-redux