@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) этому вызову? Третий вопрос может быть сложный(а может нет) из-за нехватки информации, то ответьте хотя бы на первые два вопроса
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
@vadimMalovaniy
1. action.shift || state.shift это для дефолтных значений. Или если action.shift не пришел, то оставляют старый который сейчас в state.shift чтобы не перезаписать на undefined.

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

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

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

Войти через центр авторизации
Похожие вопросы