Задать вопрос
@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 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • ProductStar
    Разработка на React
    6 недель
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
Решения вопроса 1
@vadimMalovaniy
1. action.shift || state.shift это для дефолтных значений. Или если action.shift не пришел, то оставляют старый который сейчас в state.shift чтобы не перезаписать на undefined.

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

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

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

Похожие вопросы
от 250 000 до 300 000 ₽
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Екатеринбург
от 50 000 до 90 000 ₽