Задать вопрос
@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) этому вызову? Третий вопрос может быть сложный(а может нет) из-за нехватки информации, то ответьте хотя бы на первые два вопроса
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
@vadimMalovaniy
1. action.shift || state.shift это для дефолтных значений. Или если action.shift не пришел, то оставляют старый который сейчас в state.shift чтобы не перезаписать на undefined.

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

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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽