Как в Redux подписаться на события из компонента?
Для разработки используется CREATE-REACT-APP
Все ответы которые удалось найти, касаются более упрощенной структуры проекта.
store.subscribe(() => {
console.log(store.getState().lastAction);
});
Но у меня проект такого типа
https://monsterlessons.com/project/categories/redux
Основная задача подписки на dispatch type в том, что бы actions из разных файлов не имели понятия о существовании друг друга.
EVENT1 и EVENT2 запускаются из разных файлов, import EVENT2 в EVENT1 неверное решение, тем более мешает dispatch =>
При такой схеме проекта, не могу найти где подписаться на изменения.
Для форума сделал упрощенный пример
index.js
import React from 'react'
import ReactDOM from 'react-dom'
import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux'
import { composeWithDevTools } from 'redux-devtools-extension'
import thunk from 'redux-thunk'
import { Router, Route, hashHistory } from 'react-router'
import { syncHistoryWithStore } from 'react-router-redux'
import App from './App'
import reducer from './reducers'
const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk)));
const history = syncHistoryWithStore(hashHistory, store);
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<Route path="/" component={App} />
</Router>
</Provider>,
document.getElementById('root')
);
reducers
export default function reducer1(state = initialState, action) {
switch (action.type) {
default: {
return state;
}
action1
export const action1 = (data) => dispatch => {
dispatch({ type: 'EVENT1', payload: {value1:1} })
}
action2
export const action2 = (data) => dispatch => {
dispatch({ type: 'EVENT2', payload: {value2:2} })
}
Component
import * as action1 from './actions/action1';
import * as action2 from './actions/action2';
class App extends Component {
componentDidMount() {
this.props.state.reducer1.subscribe( ()=>{
/*мои представления о работе подписки, тут мы имеем доступ к EVENT1 и EVENT2*/
} )
}
render() {
return (<div></div>)
}
}
export default connect(
(state, props, ownProps) => ({
state: state,
props: props
}),
actions1,actions2
)(App)
но в моем случае
this.props.state.reducer1.value1
не имеет таких функций как getState() и subscribe()