Можно ли реализовать фильтрацию и сортировку данных в React контейнере при помощи Reselect и Redux?

Всем привет. Возник вопрос с reselect для redux. Сразу оговорюсь, что решил задачу создавая еще одно поле в редьюссере, которое хранило отсортированный/отфильтрованный массив в зависимости от действий.
Однако, я думаю, что как сортировка, так и фильтрация это дело отдельно UI. Соответственно хотелось бы реализовать те же функции, но в контейнере (Smart component).
Начальное состояние корневого редьюсера:
let initialState = {
  persons:[],
  active:0,
  loading:false,
  filter:"",
  field:"name"
}


1.Сначала с помощью reselect создал два селектора, которые при изменении соответствующих полей вызывали нужные функции:
let getPersons = (state) => state.persons
let getFilter = (state) => state.filter
let getField = (state) => state.field

let filterData = createSelector(
  getPersons,
  getFilter,
  (persons,filter) => {
    return persons.filter( p =>{
      console.log("FILTER");
      return p.name.toLowerCase().indexOf(filter.toLowerCase()) !== -1
    })
  },
)

let sortData = createSelector(
  getPersons,
  getField,
  (persons,field) =>  {
    console.log("SORT");
    let sortarr = persons.slice(0);
    return sortarr.sort((a , b) => {
      if (a[field] > b[field])  return  -1
      if (a[field] < b[field])  return  1
      return 0
  })
})

2. Собственно теперь sortData возвращает отсортированный массив по последнему field и, что важно хранит его значение, что помогает нам избежать лишних вызовов сортировки.
Подобно и fielterData
3. Нужно реализовать фильтрацию последних отсортированных данных и сортировку последних отфильтрованных данных
ссылка на код:
https://github.com/maximusnikulin
  • Вопрос задан
  • 1130 просмотров
Пригласить эксперта
Ответы на вопрос 1
@comerc
Это ссылка не на код, а на аккаунт. Если я правильно понял, вопрос в том, как поженить два селектора. Удалось ли победить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы