@petrro

Три вопроса по Redux-React коду?

Есть приложение Redux. Я только начал изучать Redux, поэтому не все еще понимаю. У меня есть три коротких вопроса по этому коду.
Я закомментировал строки, по которым есть вопросы:
Это reducer:

import { searchFilter } from "../containers/app";

export function reducer(state = {}, action) {
  switch (action.type) {
    case "SET_SHIFT":
      return Object.assign({}, state, {
        shift: action.shift
      });
    case "SET_SEARCH":
      return Object.assign({}, state, {
        search: action.search.toLowerCase()
      });
    case "RUN_FILTER":
      var newData = state.data[action.shift || state.shift].filter(x => {
        return (
          x["planeTypeID.code"].toLowerCase().includes(action.search || state.search)
        );
      });
      return Object.assign({}, state, {
        shift: action.shift || state.shift,                                  // строка1
        search: action.search || state.search,                        // строка2
        filteredData: searchFilter(state.search, newData)
      });
    case "LOAD_DATA_START":
      return Object.assign({}, state, {
        day: action.day
      });
    case "LOAD_DATA_END":
      var newData = action.payload.data[state.shift].filter(x => {
        return (
          x["planeTypeID.code"] &&                                         
          x["planeTypeID.code"].toLowerCase().includes(action.search || state.search)  //строка3
        );
      });
      return Object.assign({}, state, {
        data: action.payload.data,
        shift: Object.keys(action.payload.data)[0],
        filteredData: searchFilter(state.search, newData)             //строка4
      });
    default:
      return state;
  }
}


1) Почему в строке 1 мы пишем action.shift || state.shift? а не просто: action.shift? В строке 2 то же самое: почему мы пишем action.search || state.search, а не просто: action.search?

2) Почему в строке 3 мы пишем:
x["planeTypeID.code"] && x["planeTypeID.code"].toLowerCase().includes(action.search || state.search)

а не просто:
x["planeTypeID.code"].toLowerCase().includes(action.search || state.search)
?

planeTypeID.code - это свойство объекта API.

3) Почему в строке 4 searchFilter это вызов функции? И почему мы передаем такие параметры (state.search, newData) этому вызову? Третий вопрос может быть сложный(а может нет) из-за нехватки информации, то ответьте хотя бы на первые два вопроса
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@vadimMalovaniy
1. action.shift || state.shift это для дефолтных значений. Или если action.shift не пришел, то оставляют старый который сейчас в state.shift чтобы не перезаписать на undefined.

2. Та же история. Если x["planeTypeID.code"] отсутствует то возвращается false. Если же значение есть то к нему начинают применяться методы .toLowerCase и тд. И в итоге возвращается строка.

3. Это какая то кастомная функция. Просто делает какие то преобразования скорее всего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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