Dan*_*ory 5 state reducers reactjs redux react-redux
敲我的头。我已经浏览了典型的ReactJS和Redux应用程序教程,并且正在开发自己的应用程序。问题是当使用CombineReducers()为Redux存储创建单个reducer时。我目前有3个减速器,当将它们添加为createStore()的减速器参数时,它们可以正常工作。第一个reducer包含我的所有动作,称为:
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
}
}
Run Code Online (Sandbox Code Playgroud)
第二个和第三个reducer是使用ImmutableJS构建的,以传播一些虚拟内容以用于单独的列表。同样,这些减速器单独工作,但当CombineReducers()组合它们时不工作。第二个reducer文件称为:
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
}
}
Run Code Online (Sandbox Code Playgroud)
第三个文件称为:
行情清单
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
}
}
Run Code Online (Sandbox Code Playgroud)
我通过reducers文件夹中的index.js导出了所有文件:
index.js
export { default as HeaderReducers } from './HeaderReducers';
export { default as ListItems } from './MessageList';
export { default as QuotesList } from './QuotesList';
Run Code Online (Sandbox Code Playgroud)
然后打电话来在以下位置创建我的商店:
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);
Run Code Online (Sandbox Code Playgroud)
在启动时记录商店的状态会返回一个对象或列表,具体取决于我使用的reducer。当我通过combinedReducer()运行它们时,我得到了一个返回的对象,将每个reducer连接在一起。立即中断的是我在ListItems.js中设置的.map函数
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)
Run Code Online (Sandbox Code Playgroud)
控制台显示“ _ListItems.map不是函数”。我已经尝试过编辑mapStateToProps返回值,但我正在抓紧稻草。感谢您阅读本文。任何帮助肯定是感激的。
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |