Вс, 24 июля 2016 г.

Git

Понимание того, как использовать rebase немного лучше. Я чувствую, что это очень важно при совместном использовании ветки с другими разработчиками. В настоящее время я понимаю, что он ПЕРЕМЕЩАЕТ все мои изменения выше коммитов удаленной ветки.

If I do:

git pull

Затем Git попытается ОБЪЕДИНИТЬ изменения!!!

Чего я НЕ хочу.

Я хочу, чтобы удаленные изменения были заполнены ниже моих изменений, чтобы в случае возникновения конфликтов слияния я сам их разрешал.

Итак, мне нужно сделать это:

git pull --rebase

Таким образом, rebase — это, по сути, флаг, который говорит: «Давайте правильно сотрудничать в этой ветке!» — и является вспомогательной функцией, которая позволяет это сделать.

ТАКЖЕ. Мне сказали, и я вижу в этом мудрость, использовать только push и pull, указывая происхождение и имя ветки.

Это, я думаю, предотвращает непреднамеренное нажатие/вытягивание не той ветки и намеренное слияние….

Сокращение

Состав редьюсера: это решение для обеспечения того, чтобы функции были связаны только с одной вещью. Я снова смотрел видео Дэна Абрамова «Начало работы с Redux», и я нахожусь на той стадии, когда есть ОДИН редуктор todos, который решает 2 проблемы:

  1. Как обновляется общий массив задач
  2. Как обновляется каждое отдельное задание

Что мы делаем, так это выделяем обновление todo в отдельную функцию, и мы вызываем ее из WITHIN редуктора todos, передавая ТО ЖЕ ДЕЙСТВИЕ. Хотя это действие проходит примерно 2 раза, это лучше, чем иметь родительский (todos) редуктор, обрабатывающий 2 проблемы.

ДО:

// does everything
const todos = (state = [], action) => {
  switch(action.type) {
    case 'ADD_TODO':
      return [
        ...state,
        {
          id: action.id,
          text: action.text,
          completed: action.completed || false,
        }
      ];
    case 'TOGGLE_TODO':
      return state.map(todo => {
        if (todo.id !== action.id) {
          return todo;
        }
        return {
          ...todo,
          completed: !todo.completed,
        };
      });
    default:
      return state;
  }
};

ПОСЛЕ:

// handles individual todo
const todo = (state, action) => {
  switch(action.type) {
    case 'ADD_TODO':
      return {
        id: action.id,
        text: action.text,
        completed: action.completed || false,
      };
    case 'TOGGLE_TODO':
      if (state.id !== action.id) {
        return state;
      }
      return {
        ...state,
        completed: !state.completed,
      }
    default:
      return state;
  }
}

// handles entire app state (array of todos)
const todos = (state = [], action) => {
  switch(action.type) {
    case 'ADD_TODO':
      return [
        ...state,
        todo(undefined, action)
      ];
    case 'TOGGLE_TODO':
      return state.map(t => todo(t, action));
    default:
      return state;
  }
};

Обратите внимание, что состояние в функции todo теперь относится к отдельной задаче, а не ко всему массиву задач.

Существует единственный редюсер верхнего уровня, который обрабатывает состояние приложения, но он делегирует и абстрагирует обработку некоторых частей дерева состояний другим редюсерам.

Кроме того, понимая, что состояние можно установить, вызывая функции, например:

const todoApp = (state = {}, action) {
  return {
    todos: todos(state.todos, action),
    visibilityFilter: visibilityFilter(
		state.visibilityFilter, action),
  };
};