在這一點上抨擊我的頭。我已經瀏覽了典型的ReactJS和Redux應用程序,並正在開發我自己的應用程序。問題是使用combineReducers()爲Redux商店創建單個縮減器時。我目前有三個減速器,它們在作爲createStore()的減速器參數進行添加時可以很好地工作。第一減速器擁有所有我的行爲,被稱爲:combineReducers破壞Redux狀態,也打破多ImmutableJs減速器
HeaderReducer
import { isActive } from '../actions/HeaderActions';
export const initialButtonState = {
isActive: false,
invertStyles: false
}
export default (state = initialButtonState, action) => {
switch (action.type) {
case 'SET_ACTIVE':
return {
...state,
isActive: action.isActive(state),
invertStyles: action.invertStyles(state),
}
default:
return state
}
}
第二和第三減速器使用ImmutableJS建傳播單獨列出了一些假的內容。同樣,這些減速器單獨工作,但不能在combineReducers()組合它們時使用。第二減速器文件名爲:
listItems中
import Immutable from 'immutable';
const messagesList = Immutable.List(['9:00AM - 9:30AM','10:30AM - 11:30AM','11:45AM - 12:30PM','1:00PM - 2:15PM','3:00PM - 4:00PM']);
export default (state = messagesList, action) => {
switch(action.type) {
case 'addItem':
return state.push(action.item)
case 'deleteItem':
return state.filter((item, index) => index !== action.index)
default:
return state
}
}
第三個文件名爲:
QuotesList
import Immutable from 'immutable';
const quotesList = Immutable.List(['Company A: 100.00$','Company B: 200.00$','Company C: 300.00$','Company D: 400.00$','Company E: 500.00$<']);
export default (state = quotesList, action) => {
switch(action.type) {
case 'addItem':
return state.push(action.item)
case 'deleteItem':
return state.filter((item, index) => index !== action.index)
default:
return state
}
}
我必須通過減速器內的index.js出口的所有文件文件夾:
index.js
export { default as HeaderReducers } from './HeaderReducers';
export { default as ListItems } from './MessageList';
export { default as QuotesList } from './QuotesList';
然後叫在創建我的商店:
Store.js
import { createStore, combineReducers } from 'redux';
import * as reducers from '../reducers';
// import HeaderReducers from '../reducers/HeaderReducers';
// import ListItems from '../reducers/MessageList';
// import QuotesList from '../reducers/QuotesList';
// let reducer = combineReducers({ ListItems: ListItems, quotes: QuotesList})
// export default createStore(ListItems)
const reducer = combineReducers(reducers);
export default createStore(reducer);
記錄在推出存儲的狀態返回一個對象或列表,這取決於我用減速機。當我通過combineReducer()運行它們時,我得到一個單獨的Object將每個Reducer保存在一起。什麼,立刻打破是.MAP功能我已經安裝在ListItems.js
import React from 'react';
import { connect } from 'react-redux';
import NewItem from './NewItem';
import { addItem, deleteItem } from '../../../actions/HeaderActions';
const ListItems = ({ListItems, dispatch}) => (
<div>
<ul>
{ListItems.map((ListItem, index) => <li><span key={index}> {ListItem} <button onClick={e => {
dispatch(deleteItem(index))
}}>X</button></span></li>)}
</ul>
<NewItem />
</div>
)
function mapStateToProps(ListItems) {
return {
ListItems,
}
}
export default connect(mapStateToProps)(ListItems)
控制檯顯示「_ListItems.map不是一個函數」。我已經經歷了,並嘗試編輯mapStateToProps返回值,但我抓住了吸管。感謝您閱讀本文。任何幫助肯定是讚賞的。
我的兩個減速器是不可變的。一個不是。人們如何去結合所有的減速器,不可變或不可變? – DaneTheory
從來沒有嘗試過,我很確定,但我認爲你必須將reducer轉換爲不可變的。 –