Reducer - redux中的状态为空

osh3o9ms  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(156)

为了学习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;
k97glaaz

k97glaaz1#

你已经设置了空数组作为两个reducer的初始状态,但是你使用CREATE_BOOK操作向booksReducer添加新元素,这就是为什么你可以在那里找到一些状态。
你必须知道sortReducer不会从不同的reducer继承状态,所以,当你尝试使用CHANGE_SORT操作对图书进行排序时,你实际上是在对一个空数组进行排序,这就是为什么你会得到[]作为结果的原因。

相关问题