Я довольно новичок в реакции, так что это может быть глупый вопрос.
Я работаю над приложением, которое управляет RSS-фидами, поэтому структура всего моего приложения похожа на эту
<div className="App">
<Header />
<Feeds />
</div>
оба компонента имеют собственный редуктор и действия.
проблема возникает, когда я пытаюсь создать новый канал (фактически управляемый в редукторе каналов) из моего компонента заголовка. поэтому я должен получить доступ к состоянию feedsReducer из моего headerReducer.
Я не уверен, что делать дальше.
я должен получить доступ к редуктору каналов из компонента заголовка? (это также подразумевает, что feedsReducer должен знать мои действия заголовка)
Я добавлю код, чтобы прояснить проблему
index.js
import feedsReducer from './components/Feeds/FeedsReducer';
import headerReducer from './components/Header/HeaderReducer';
const rootReducer = {
feeds:feedsReducer,
header: headerReducer
};
const store = createStore(combineReducers(rootReducer));
Заголовок / Header.js
import { ADD_FEED } from './actions';
class Header extends Component {
state = {
feedUrl: ""
};
addFeed = () => {
axios.post(
'/feeds/add',
{
url: 'myNewRssFeed.com'
})
.then(feed => {
//this is calling the HeaderReducer
this.props.addFeed(feed.data);
})
.catch(err => console.log(err));
}
}
const mapDispatchToProps = dispatch => {
return {
addFeed: (feed) => dispatch({ type: ADD_FEED, payload: { feed } })
};
};
export default connect(null, mapDispatchToProps)(Header);
Заголовок / actions.js
export const ADD_FEED = "ADD_FEED";
HeaderComponent / HeaderReducer.js
const reducer = (state, action) => {
const newState = {
...state
}
switch (action.type) {
case storeActions.ADD_FEED:
// at this point newState.feeds doesn't exist because it's part from the FeedsReducer
newState.feeds = newState.feeds.push(action.payload.feed);
break;
}
return newState;
}
Ленты / FeedsReducer.js
const initialState = {
feeds: []
}
const reducer = (state = initialState, action) => {
const newState = {
...state
}
switch (action.type) {
//this action is commented because was recently moved to the headerComponent/actions.js
/* case storeActions.ADD_FEED:
newState.feeds = newState.feeds.push(action.payload.feed);
break; */
case storeActions.LOAD_FEEDS:
newState.feeds = action.payload.feeds;
break;
}
return newState;
}
Спасибо за совет.