Вс, 24 июля 2016 г.
Git
Понимание того, как использовать rebase немного лучше. Я чувствую, что это очень важно при совместном использовании ветки с другими разработчиками. В настоящее время я понимаю, что он ПЕРЕМЕЩАЕТ все мои изменения выше коммитов удаленной ветки.
If I do:
git pull
Затем Git попытается ОБЪЕДИНИТЬ изменения!!!
Чего я НЕ хочу.
Я хочу, чтобы удаленные изменения были заполнены ниже моих изменений, чтобы в случае возникновения конфликтов слияния я сам их разрешал.
Итак, мне нужно сделать это:
git pull --rebase
Таким образом, rebase — это, по сути, флаг, который говорит: «Давайте правильно сотрудничать в этой ветке!» — и является вспомогательной функцией, которая позволяет это сделать.
ТАКЖЕ. Мне сказали, и я вижу в этом мудрость, использовать только push и pull, указывая происхождение и имя ветки.
Это, я думаю, предотвращает непреднамеренное нажатие/вытягивание не той ветки и намеренное слияние….
Сокращение
Состав редьюсера: это решение для обеспечения того, чтобы функции были связаны только с одной вещью. Я снова смотрел видео Дэна Абрамова «Начало работы с Redux», и я нахожусь на той стадии, когда есть ОДИН редуктор todos, который решает 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), }; };