为了学习redux,我使用了这个github示例-https://github.com/Davidosky007/My-react-redux-bookstore-app在这里我添加了排序功能,但是状态在我的reducer中是空数组[]。
PS:我知道我可以在booksReducer中添加它,但我想创建新的Reducer。我不能理解books Reducer是如何获得状态的,但不是sortReducer。
组件-排序筛选器. js
import React from 'react';
import PropTypes from 'prop-types';
const SortFilter = ({ handleSortChange }) => {
const categories = ['title', 'category', 'id'];
return (
<select className="select-filter" onChange={handleSortChange}>
{categories.map((book) => (
<option key={book} value={book}>
{book}
</option>
))}
</select>
);
};
SortFilter.propTypes = {
handleSortChange: PropTypes.func.isRequired,
};
export default SortFilter;
集成在BookList.js中:
<div className="float-rit">
<span className="filter">
Sort by
<SortFilter
handleSortChange={(e) => {
sortChange(e);
}}
/>
</span>
</div>
const sortChange = ({ target: { value } }) => {
debugger;
changeSort(value, books);
};
const mapDispatchToProps = (dispatch) => ({
removeBook: (book) => dispatch(removeBook(book)),
changeFilter: (category) => dispatch(changeFilter(category)),
changeSort: (category, books) => dispatch(changeSort(category, books)),
});
操作- index.js
export const changeSort = (category, books) => ({
type: CHANGE_SORT,
category,
books,
});
减速器- sort.js
/* eslint-disable */
import { CHANGE_SORT } from '../actions/index';
/* eslint-disable */
const sortReducer = (state = [], action) => {
switch (action.type) {
case CHANGE_SORT:
debugger;
const cat = action.category;
return state.sort((a, b) =>
a[cat] > b[cat] ? 1 : b[cat] > a[cat] ? -1 : 0
);
default:
return state;
}
};
export default sortReducer;
请忽略这个函数中的额外输入参数书籍,我正在尝试一些东西。我已经采取了过滤器和removebook的参考写它,但我可以看到在removeBook reducer的状态来了,但不是在sortReducer。请帮助。代码removeBook reducer:
import { CREATE_BOOK, REMOVE_BOOK } from '../actions/index';
const booksReducer = (state = [], action) => {
switch (action.type) {
case CREATE_BOOK:
return [...state, action.book];
case REMOVE_BOOK:
return state.filter((book) => book.id !== action.id);
default:
return state;
}
};
export default booksReducer;
1条答案
按热度按时间k97glaaz1#
你已经设置了空数组作为两个reducer的初始状态,但是你使用
CREATE_BOOK
操作向booksReducer
添加新元素,这就是为什么你可以在那里找到一些状态。你必须知道
sortReducer
不会从不同的reducer继承状态,所以,当你尝试使用CHANGE_SORT
操作对图书进行排序时,你实际上是在对一个空数组进行排序,这就是为什么你会得到[]作为结果的原因。