Как прослушать изменение состояния редукса из компонента app.js (root)?
Привет,
Я хочу вызвать асинхронную функцию, которая записывает в Firestore DB, когда она существуетконкретный объект в состоянии.
Я подумал, что способ сделать это - поместить логику в корневой компонент приложения (index.js), потому что мне нужно вызвать его, если выполняется условие независимо от того, какой компонент экранаopen.
это мое приложение. Компонент:
import { Provider } from 'react-redux';
import configureStore from './store/configureStore';
const store = configureStore();
export default class App extends React.Component {
render() {
//navigators were removed for code brevity and component imports
const MainNavigator = TabNavigator({
welcome: { screen: WelcomeScreen },
login: { screen: LoginScreen },
signup: { screen: RegisterScreen },
main: { screen: AppNavigator },
}, {
navigationOptions: {
tabBarVisible: false
},
});
return (
<Provider store={store}>
<View style={{ flex: 1 }}>
{/*<ModalAlerta />*/}
<StatusBar hidden />
<MainNavigator />
</View>
</Provider>
);
}
}
--- Этот фрагмент обновлен:
Это configureStore (), который я импортирую:
import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import reducers from './reducers';
let composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
function configureStore(initialState) {
const store = createStore(
reducers,
initialState,
composeEnhancers(applyMiddleware(thunk)));
return store;
}
export default configureStore;
--- Конец издания
Я думал, что с помощью componentWillReceiveProps () можно было бы добиться цели, но он не вызывается.Поскольку я не видел ни одного журнала метода жизненного цикла, я понял, что состояние и реквизиты здесь не связаны, как в подкомпонентах (причина не вызываться), поэтому я попытался подключить компонент приложения как любой другой компонент, используя connect ().
Когда я попытался сделать это, я сделал это так:
import { Provider } from 'react-redux';
//I removed the export statement from here to bottom
class App extends React.Component {
componentWillReceiveProps(nextProps) {
//Did not get triggered
console.log(nextProps);
}
render() {
//navigators were removed for code brevity and component imports
const MainNavigator = TabNavigator({
welcome: { screen: WelcomeScreen },
login: { screen: LoginScreen },
signup: { screen: RegisterScreen },
main: { screen: AppNavigator },
}, {
navigationOptions: {
tabBarVisible: false
},
});
return (
<Provider store={store}>
<View style={{ flex: 1 }}>
{/*<ModalAlerta />*/}
<StatusBar hidden />
<MainNavigator />
</View>
</Provider>
);
}
}
const mapStateToProps = state => {
return {
factura: state.facturacion.factura[0]
};
};
export default connect(mapStateToProps, { })(App);
, но я получаю ошибку:
Error: Invariant Violation: Could not find "store" in either the context or props of "Connect(App)". Either wrap the root component in a <Provider>, or explicitly pass "store" as a prop to "Connect(App)".
Я искалкак явно передать магазин как реквизит для подключения, но я пока не могу заставить его работать.
Может кто-нибудь пролить свет на этого новичка?