Я также жил в Нанкине Санбайюнь в течение трех лет, из невежественного студента колледжа в более зрелого молодого человека.За последние три года я также сделал много проектов.react
Также естьvue
Стек технологий, позвольте мне рассказать о моих взглядах на эти два основных фреймворка.react
иvue
Лагерь был один за другим, и в этот момент я, кажется, слышу пренебрежительное отношение коллеги Vue 1: «А? в этот момент)
1. Панорама
Скриншот из онлайн-класса учителя Dasheng в открытом баре
2. Фон
реагировать: профессиональный
- реагировать родился в 2011 году (FaxJS),
- 3 июля 2013 г. v0.3.0
- 30 марта 2016 г. v0.14.8
- 9 апреля 2016 г. v15.0.0
- 27 сентября 2017 г. v16.0.0, официальное рождение волокна
- В 2019 году выпущенная версия 16.8 официально поддерживает синтаксис хуков.
- 22 октября 2020 г. v17
Решать проблему
React
Для решения какой проблемы используется, официальный сайт говорит: We build React to solve one problem:building large applications with data that changes over time.
вью: легенда
Он начинался как личный проект в 2013 году, но теперь он стал одним из трех основных интерфейсных фреймворков в мире и первым выбором для фронтенда в материковом Китае. (Интервьюер спросил: Почему вы научились использовать Vue? Ответ: Из-за патриотизма!)
-
2013 год,существует
Google
Ю Юси, которая работает, былаAngular
Вдохновленный , я извлек из него те части, которые мне понравились, и разработал облегченный фреймворк, изначально названный какSeed
. -
Декабрь того же года, семя проросло, переименовано
Vue
(Поскольку это библиотека слоев представления, а vue по-французски означает представление), номер версии — 0.6.0. -
2014.01.24,
Vue
Официально выпущена, номер версии 0.8.0. - опубликовано2014.02.250.9.0, имеет собственное кодовое имя:
Animatrix
, название происходит от анимационной версии «Матрицы», после этого важные версии будут иметь собственные кодовые имена. - 0.12.0 выпущен в2015.06.13, кодовое название
Dragon Ball
(Жемчуг дракона), в этом году,Vue
произошел большой взрыв,Laravel
сообщество (популярноеPHP
сообщество фреймворка) первое использованиеVue
,Vue
существуетJS
Сообщество также сделало себе имя. - 1.0.0
Evangelion
(Евангелион) ДаVue
Первая веха в истории. тот же год,vue-router
(2015-08-18),vuex
(2015-11-28),vue-cli
(2015-12-27) были выпущены последовательно, отмечаяVue
Превратился из библиотеки слоев представления в прогрессивную структуру. Многие передовые студенты также сталиVue
Пользователь(vue1
чистый отзывчивый). -
1 октября 2016 г. 2.0.0
Ghost in the Shell
(Призрак в доспехах) стал второй крупной вехой, вобравшей в себяReact
изVirtual Dom
Решение также поддерживает рендеринг на стороне сервера. -
4 февраля 2019 г.Задолго до выпуска 2.6 основная команда Vue была занята разработкой vue-cli3.0, накопила большой спрос и выпустила его.
vue2
Предпоследняя версия (выпущена в 2020 году) -
18 сентября 2020 г.с участиемБыть быстрообучаемой и доступной структурой для всехобязанность
vue3
Он уже здесь, и в том же году был запущен инструмент для упаковки нового поколения.vite
(может быть заменено в будущемwebpack
)
Базовая карта масс Vue выглядит следующим образом:
3. Техническая мысль
React — это функциональная идея в целом.Компоненты используют синтаксис jsx, все на js, а html и css все интегрированы в javaScript.Синтаксис jsx относительно более гибкий.
Общая идея Vue по-прежнему заключается в том, чтобы охватить классическую форму html (структура) + css (производительность) + js (поведение).Vue поощряет разработчиков использовать шаблоны шаблонов и предоставляет инструкции для разработчиков, такие как v-if, v-show, v-for и другие инструкции, поэтому при разработке Vue-приложений будет ощущение написания классических веб-приложений (разделение структуры, представления и поведения).
Некоторое старомодное управление данными (реквизиты, данные и состояние), написание компонентов и т. д. не будут здесь сравниваться.
1. Сходства и различия ключей на примере
1,react
иvue
добавить в списокkey
Конечная цель задачи та же: точнее и быстрееoldVnode
соответствующийvnode
узла для повышения производительности. Но есть некоторые различия в алгоритмах, которые они реализуют.
react
React
При рендеринге массива, если дочерний компонент не указанkey
, будет зацикливаться по умолчаниюindex
в видеkey
будет использоваться для первого рендера.
Исходный код, по сути, представляет собой метод сравнения грубой силы: поскольку волокно с односвязным списком не может использовать алгоритм двойного указателя, невозможно использовать оптимизацию двойного указателя для алгоритма. В общем, есть два раунда обхода, первый раунд обхода: обработка обновленных узлов. Второй раунд обхода: обработайте оставшиеся узлы, которые не являются частью обновления.
Чтобы уменьшить сложность алгоритма,React
изdiff
Предустановлены лимиты:
- только на родственных элементах
Diff
. еслиDOM
Узел пересекает уровень в двух обновлениях до и после, затемReact
Не буду пытаться использовать его повторно. - Два разных типа элементов создают разные деревья. если элемент состоит из
div
статьp
,React
уничтожитdiv
и его узлы-потомки, и создать новый p и его узлы-потомки. - судить первым
key
судить сноваtype
, если они одинаковы, то это один и тот же узел. Обновить > Добавить/удалить
vue
vue
существуетdiff
производительность лучше, чемreact
, когда я внимательно читаю исходный код и книги, я очень восхищаюсь этим,Алгоритм алкогольных напитков. Самая длинная возрастающая подпоследовательностьНапример: взять массив[2, 11, 6, 8, 1]
Например: окончательный результат вывода[0, 2, 3]
, что указывает на то, что индексы наиболее сильно растущих последовательностей равны 0, 2 и 3 соответственно, соответствующие значения равны 2, 6 и 8. Другими словами, в этом массивесамый продолжительный непрерывный ростЗначением являются три элемента 2, 6 и 8 в массиве.
Итак, какова цель использования этого метода для vue3, чтобы тратить столько усилий? В процессе DOM-Diff Vue2 отдает приоритет специальным сценариям, то есть прямому сравнению, прямому сравнению, прямому сравнению и т. д.
иVue3
существуетDOM-Diff
процесс, согласноnewIndexToOldIndexMap
Найдите самую длинную стабильную последовательность из списка старых и новых индексов узлов., посредством алгоритма сравнения самой длинной растущей подпоследовательности, узнать узлы, которые не нужно перемещать в старых и новых узлах, повторно использовать их на месте, только для узлов, которые необходимо переместить или были перемещеныpatch
(Добавление операций, таких как удаление узлов) Узлы работают, чтобы максимизировать эффективность замены, что является качественным улучшением по сравнению с версией Vue2!
2. Сравнение макросов diff
react
существуетreact
Если состояние компонента изменилось,react
Этот компонент и все его потомки будут повторно визуализированы, но повторная визуализация не означает, что все предыдущие результаты визуализации будут отброшены.react
все равно пройдетdiff
дважды сравнить манекенdom
Наконецpatch
к реальномуdom
начальство. Тем не менее, если дерево компонентов слишком велико,diff
На самом деле, некоторые расходы все равно будут. реагировать внутренне черезfiber
оптимизацияdiff
Алгоритмы, внешне рекомендуемые для использования разработчикамиshouldComponentUpdate
pureComponent
чтобы избежать проблемы.
vue
vue2
отзывчивостьObject.defineProperty
реализовано и переписаноgetter``setter
Дождитесь серии операций для реализации паттерна наблюдателя.react
Таким же образом можно сравнить все дерево компонентов, но обновить экземпляр компонента, состояние данных которого изменилось.
3. Жизненный цикл
жизненный цикл реакции
old 15.x-16
триггерная фаза | жизненный цикл ядра реакции |
---|---|
горная сцена | конструктор, componentWillMount, визуализация, componentDidMount, |
процесс обновления | componentWillReceiveProps, shouldComponentUpdate, визуализация, componentDidUpdate |
этап удаления | componentWillUnMount |
new 16+
триггерная фаза | жизненный цикл ядра реакции |
---|---|
горная сцена | конструктор,getDerivedStateFormProps, визуализация, компонентDidMount |
процесс обновления | getDerivedStateFormProps,getSnapshotBeforeUpdate, shouldComponentUpdate, визуализация, componentDidUpdate |
этап удаления | componentWillUnmount |
Другое: компонентДидКатч
Именование жизненного цикла React всегда было очень семантическим (шепотом bb: действительно вонючим, длинным и трудным для запоминания)
жизненный цикл
API опций | Hook inside setup |
---|---|
beforeCreate | |
created | |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeUnmount(vue2 beforeDestory) | onBeforeUnmount |
unmounted(vue2 destoryed) | onUnmounted |
errorCaptured | onErrorCaptured |
renderTracked(отслеживание состояния vue3) | onRenderTracked |
renderTriggered(триггер состояния vue3) | onRenderTriggered |
activated | onActivated |
deactivated | onDeactivated |
4. Функциональное программирование
Обе стороны внесли масштабные изменения, хотя исходный код отличается, дизайн-мышление и простота кода действительно улучшаются.
react hooks
Оригинальный утомительный жизненный цикл compomentDidUpdate="useEffect", хотя и не совсем такой же, но в большинстве сценариев, с точки зрения разработчика, нас больше беспокоят последствия (побочные эффекты) изменения данных в реквизитах или состоянии. сохраняет собственный процесс разработчика сравнения значений до и после. (Это должно быть реакцией, чтобы учиться у vue watch)
vue3 комбинированный API
Комбинированный API vue3 опирается на некоторые идеи в хуках реагирования.Надо сказать, что синий лучше синего.Кроме того, сам фреймворк проделал большую работу по оптимизации, что несравнимо с реагированием с точки зрения представление.
react | vue |
---|---|
useState, ссылка | реактивный, исх. |
useEffect | onMounted, смотреть, смотретьЭффект, onUnmounted |
Подобные части разобраны выше, и useEffect сравнивается с watchEffect. |
function() {
useEffect(()=>{
// 当demo发生变化时触发
console.log(demo)
},[demo])
return (
<div>react</div>
)
}
import {reactive, watchEffect} from 'vue'
export default {
setup() {
const state = reactive({ count: 0, name: 'zs' })
watchEffect(() => {
console.log(state.count)
console.log(state.name)
})
return {
state
}
}
}
Благодаря реактивному механизму внутри исходного кода во время инициализации новый APIwatchEffect
Вам даже не нужно отслеживать, кто изменился, чтобы вызвать побочные эффекты, потому что весь процесс мониторингаvue3
в исходном кодеProxy
Законченный.
Мало того, vue3 представил синтаксис, более близкий к нативному js,как! ! ! ! ! !
<script setup>
import { reactive, ref} from "vue";
// 渐进式更新:ref api
let val = ref("");
let todos = reactive([
{
id: 0,
title: "吃饭",
done: false,
},
{
id: 1,
title: "睡觉",
done: false,
},
]);
function addTodo() {
todos.push({
id: todos.length,
title: val.value,
done: false,
});
val.value = "";
}
</script>
На самом деле здесь студенты стека технологий vue должны тайно гордиться, и они говорят vue yes!
К сожалению, у такой хорошей библиотеки тоже есть проблемы.vue2
ОтзывчивыйObject.defineProperty
Это клише — не иметь возможности отслеживать изменения значений свойств, добавленных после индексов массива и объектов.vue3
УсыновленныйProxy Api
Решая эти проблемы, он также приносит новые проблемы, такие какreactive
Могут быть переданы только объекты (можно использовать простые и сложные значения react useState), а также официально рекомендованныйref
но нужно пройти .value
Чтобы получить ценность, это действительно заставляет сообщество жарить горшок, для этогоvue
Команда была вынуждена стартовать под давлениемtoRefs
(Заинтересованные студенты могут узнать об этом. Ранее я обсуждал это с Ибао в автономном режиме).
5. Обработка событий (@Click vs onClick)
vue
vue
используется вv-on
(сокращенно@
) контроль командDOM
событие и запустить несколькоJavaScript
код. обычно используетсяv-on
Получает имя метода для вызова.
<div @click="helloShanghai">welcome</div>
<div @click="helloShanghai('hello')">welcome</div>
Чтобы получить доступ к собственным событиям DOM, вы можете явно передать $event методу
<div @click="helloShanghai('hello', $event)">welcome</div>
общий элементaddEventListener
, компонент$on
react
React
Обработка событий элемента иDOM
Элементы похожи, но с небольшой синтаксической разницей:
-
React
События названы в маленьком верблюжьем регистре, а не в чистом нижнем регистре. - использовать
JSX
Синтаксис, который вам нужно передать в качестве обработчика события, а не строки.
<div onClick={this.handleClick}>Click me</div>
<div onClick={this.handleClick.bind(this)}>Click me</div>
<div onClick={()=>{this.handleClick()})}>Click me</div>
<div onClick={this.handleClick()}>Click me</div><!-- 错误写法>
react16
Смонтируйте синтетические события вdocument
выше, после версии 17root
корневой элемент.
6. Компонентизация
Vue
Поощряйте писать приблизительные соглашенияHTML
шаблон. Написано очень близко к стандарту HTML
элементы, еще несколько атрибутов.React
Рекомендуется, чтобы все ваши шаблоны были общимиJavaScript
Расширение синтаксиса -JSX
написать.
7. Инструменты сборки
React ==> Create React APP Vue ==> vue-cli
8. Другие
Конечно, есть и другие сравнения, такие какvue
слот сreact
изprops.children
и Т. Д.
Действительно истощен. . .
4. Мое мнение
1,react
В мидл- и бэкенд-проектах сложнее иметь дело с повторным использованием сложной бизнес-логики или компонентов.vue
Это элегантно и узнаваемо другими, но такая элегантность имеет свою цену.Это требует общей технической силы команды, а дизайн и способности лидера должны быть лучше, поэтому стоимость разработки выше.
2,vue
Он известен своим дружественным и простым в использовании методом написания.Прогрессивная структура, более дружественный API и более дружественный дизайн значительно снижают стоимость разработки и значительно повышают эффективность.
3. С другой стороны,vue
Потому что есть много хороших常用
изapi
(Синтаксический сахар), который регулирует разработчиков и в определенной степени ограничивает их дивергентное мышление; иreact
потому что меньше常用``api
Повысьте творческий потенциал разработчиков, но также и потому, что каждыйreact
пара разработчиковreact
Разное понимание приводит к разным стилям кода.
4.vue
иreact
В длительном процессе разработки я становился все более и более зрелым.После тщательного рассмотрения я чувствую, что и то, и другое очень осуществимо на мобильных терминалах или в крупномасштабных мидл- и бэк-офисах.На самом деле, нет хорошей или плохой структуры.Что мы должны думать о том, какой технологический стек хочет использовать команда, и насколько она нравится и хороша в каком технологическом стеке.
Как вы все думаете?
Вспоминая все прошедшие события на фронте тех лет, невольно хочется спеть стихотворение.
Пять, прочитайте стихотворение
Технологические изменения, взлеты и падения один за другим
Мы были свидетелями лучших усилий jquery,
Мы стали свидетелями совершенства реакции,
Мы стали свидетелями первого появления vue,
Мы стали свидетелями силы nodejs.
Земля широка, а небо длинно,
Мы можем только кататься на ветру и волнах,
Несмотря на постоянно меняющиеся технологии,
Мы также можем покататься на поле боя.
Тем, кто продолжает учиться и стремиться к своим целям, 7 сентября 2021 г.
Шесть, вся семейная бочка
react | vue |
---|---|
реакция-маршрутизатор, реакция-маршрутизатор-dom | vue-router |
redux | vuex |
antd | элементUI, iview |
Create React APP | вью-кли, вите |
next.js | nuxt |
реактивный родной, таро | уни-приложение, weex |
antd-mobile | мятный интерфейс, вукс, воник, кубический интерфейс |
7. Справочные документы
История React.js Develop Paper
Почему React сейчас продвигает функциональные компоненты, разве не хорошо использовать классы?
Каково происхождение названия vue.js и почему оно называется vue?
Секрет исходного кода React 3 Подробное объяснение алгоритма Diff
Самая длинная восходящая подпоследовательность Vue3 getSequence
Анализ исходного кода процесса обновления Vue View
Алгоритм алкогольных напитков. Самая длинная возрастающая подпоследовательность
[vue3.0] onRenderTracked и onRenderTriggered
Использование watch и watchEffect в VUE3
Отзывчивый принцип максимально упрощенного ВУЭ
Реагировать на официальную документацию
Сравните различия, плюсы и минусы React и Vue
Углубленные принципы реагирования
Каковы преимущества и недостатки выбора Vue2 по сравнению с корзиной семейства React?
Несколько практических фреймворков мобильного пользовательского интерфейса Vue
Обновляются ли как реакция, так и избыточность с корневого узла?
Некоторые сравнения и личные размышления о Vue и React (часть 1)
Некоторые сравнения и личные мысли о Vue и React (посередине)