Сравнение небольших программ сторонних фреймворков ( wepy / mpvue / taro )

Апплет WeChat

###
Как мы все знаем, сегодня на рынке существуют различные формы, такие как мобильная сеть, ReactNative, апплет WeChat, апплет Alipay, быстрое приложение и т. д. Каждый конец представляет собой огромный портал трафика.Когда одновременно требуются бизнес-требования, они должны быть выражены на разных концах. Иногда стоимость написания нескольких наборов кода для разных терминалов, очевидно, очень высока. В настоящее время возможность адаптироваться к нескольким терминалам, написав только один набор кода, крайне необходима . Тем не менее, перед лицом нынешних зрелых сторонних фреймворков для небольших программ, представленных на рынке, выбор в соответствии с их собственными потребностями также представляет собой проблему. чтобы помочь вам в вашем техническом выборе. , Если есть какое-то неуместное место, я надеюсь исправить его;

Каковы болевые точки разработки небольших программ?

  • SetData и частые вызовы setData page jump flash process

  • Поддержка компонентизации слишком слабая (почти нет)

  • Нельзя использовать less, scss и прочие прекомпиляторы

  • запрос ограничения параллелизма

Зачем использовать сторонний фреймворк?

  • Если вы знакомы с Vue или React, вы можете быстро начать работу, а стоимость обучения низкая.
  • Набор кода может быть скомпилирован и запущен на нескольких терминалах (WeChat, Alipay, h5, RN) Апплет Alipay еще не идеален
  • Компонентная разработка отлично решает проблемы изоляции компонентов, вложенности компонентов, взаимодействия компонентов и т.д.
  • Поддержка использования сторонних ресурсов npm
  • Заставьте апплет поддерживать обещание и решите проблему с обратным вызовом
  • Такие функции, как функция генератора/класс/асинхронная функция, могут использоваться для повышения эффективности разработки.
  • Оптимизация самого апплета, например, дополнение жизненного цикла, оптимизация производительности и т. д.
  • Компилятор стилей поддержки: Scss/Less, компилятор шаблонов, компилятор кода: Babel/Typescript.

Сравнение сторонних фреймворков wepy mpvue taro

Здесь я провожу всестороннее сравнение трех широко используемых фреймворков апплетов с открытым исходным кодом, и есть основанный на реакции фреймворк перевода апплетов под названием nanchi, который не будет сравниваться из-за отсутствия исследований и исследований;

Структура апплета спецификации синтаксиса, подобная Vue, исходный код которой открыт командой Tencent, использует стиль синтаксиса и функциональные особенности Vue и поддерживает многие функции Vue, такие как компоненты «родитель-потомок», связь между компонентами, расчет вычисляемых свойств, прослушиватель-наблюдатель. , Поддерживается значение пропсов, распределение слотов и множество расширенных функций: микширование миксинов, перехватчики и т.д., первая версия WePY вышла в декабре 2016 года, то есть когда апплет только запустился. Выпущено 52 версии, последняя версия 1.7.2;

Внешний фреймворк, разработанный командой Meituan для разработки мини-программ WeChat с использованием Vue.js. Используя эту платформу, разработчики получат полный опыт разработки Vue.js, а также предоставят возможности повторного использования кода для H5 и апплетов. mpvue получил 2,7 тыс. звезд через несколько дней после выпуска, и скорость его роста резко возросла: на данный момент у него 13,7 тыс. звезд;

Внешний фреймворк, использующий React.js для разработки мини-программ WeChat, открытый исходный код которого предоставлен JD.com. Он использует ту же идею компонентизации, что и React, и жизненный цикл компонентов соответствует React. В то же время он поддерживает использование синтаксиса JSX, чтобы сделать код более выразительным. Использование Taro для разработки может получить тот же опыт разработки, что и React. . , При этом из-за использования react, кроме компиляции h5 и небольших программ, его можно компилировать и в ReactNative;

Жизненный цикл

Жизненный цикл Vue с той же спецификацией mpvue и wepy и множество различных методов

wepy

Жизненный цикл wepy в основном такой же, как и у нативных апплетов, и на этой основе объединяются некоторые функции vue; для атрибута method в WePY, поскольку он несовместим с привычками использования в Vue, очень легко вызвать Здесь необходимо подчеркнуть: в WePY атрибут method может объявлять только события связывания и перехвата тега wxml страницы, но не может объявлять пользовательские методы, что несовместимо с использованием в Vue.   `импортировать wepy из 'wepy';

класс экспорта по умолчанию MyPage расширяет wepy.page { // класс экспорта по умолчанию MyComponent extends wepy.component { customData = {} // пользовательские данные

customFunction () {}  //自定义方法

onLoad () {}  // 在Page和Component共用的生命周期函数

onShow () {}  // 只在Page中存在的页面生命周期函数

config = {};  // 只在Page实例中存在的配置数据,对应于原生的page.json文件

data = {};  // 页面所需数据均需在这里声明,可用于模板数据绑定

components = {};  // 声明页面中所引用的组件,或声明组件中所引用的子组件

mixins = [];  // 声明页面所引用的Mixin实例

computed = {};  // 声明计算属性(详见后文介绍)

watch = {};  // 声明数据watcher(详见后文介绍)

methods = {};  // 声明页面wxml中标签的事件处理函数。注意,此处只用于声明页面wxml中标签的bind、catch事件,自定义方法需以自定义方法的方式声明

events = {};  // 声明组件之间的事件处理函数

}`

mpvue

В дополнение к жизненному циклу самого Vue, mpvue также совместим с жизненным циклом апплета.Эта часть хука жизненного цикла происходит от страницы апплета WeChat.За исключением особых случаев, не рекомендуется использовать жизненный цикл апплета. велосипедный крючок.

Простой пример

Таро точно такой же, как и жизненный цикл реакции.

Рендеринг списка

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

Когда wepy необходимо зациклить и отобразить компоненты WePY (аналогично отображению собственных тегов wxml через цикл wx:for), необходимо использовать вспомогательные теги, определенные WePY.

mpvue использует v-for в соответствии с vue, просто нужно обратить внимание на один момент, рендеринг вложенного списка, необходимо указывать разные индексы!

Использование цикла списка таро в основном такое же, как и в React. Следует отметить, что в React JSX будет скомпилирован в обычное выполнение JS. Каждый элемент JSX будет фактически создан в объект JavaScript (элемент React) через createElement, так что на самом деле вы можете написать такой код, и React полностью отрисовывает:

Но в Taro JSX будет скомпилирован в строку шаблона апплета WeChat, поэтому вы не можете рассматривать шаблон, сгенерированный функцией карты, как массив. Когда вам нужно это сделать, вы должны сначала обработать массив, который нужно зациклить, а затем вызвать функцию карты с обработанным массивом. Например, приведенный выше пример следует записать так:

обработка событий

В настоящее время mpvue полностью поддерживает обработчик событий апплета и вводит виртуальный DOM Vue.js.События, связанные в предыдущем шаблоне, будут висеть на vnode, а компилятор привязывает события апплета к wxml, и Соответствующее сопоставление выполнено, поэтому, когда вы на самом деле щелкаете, вы можете использовать handleProxy во время выполнения для распределения событий на vnode через типы событий, что совпадает с механизмом Vue в WEB, поэтому он может обеспечить поддержку без потерь. Кстати, он также поддерживает пользовательские события и механизм $emit.

Таблица сопоставления событий, левая сторона — событие WEB, правая сторона — соответствующее событие апплета

**click** : 'tap',<br>
**touchstart**: 'touchstart',<br>
**touchmove**: 'touchmove',<br>
**touchcancel**: 'touchcancel',<br>
**touchend**: 'touchend',<br>
**tap**: 'tap',<br>
**longtap**: 'longtap',<br>
**input**: 'input',<br>
**change**: 'change',<br>
**submit**: 'submit',<br>
**blur**: 'blur',<br>
**focus**: 'focus',<br>
**reset**: 'reset',<br>
**confirm**: 'confirm',<br>
**columnchange**: 'columnchange',<br>
**linechange**: 'linechange',<br>
**error**: 'error',<br>
**scrolltoupper**: 'scrolltoupper',<br>
**scrolltolower**: 'scrolltolower',<br>
**scroll**: 'scroll'<br>

Обратите внимание на то, чтобы наступить на яму (официальный документ):

  • Собственные события, которых нет в списке, также можно использовать для прямого изменения привязки к @@regionchange в домене с помощью события bindregionchange. В то же время это событие также очень особенное. Его типы событий — начало и конец, что делает мы не можем отличить его в handleProxy.Что это за событие, поэтому вы слушаете имя события и тип события одновременно при прослушивании таких событий
  • Из-за возможности апплета, когда события связывания и перехвата связаны одновременно, будет запущено только связывание, а перехват не будет запущен, поэтому не наступайте на яму.
  • модификатор события Использование .stop предотвратит всплытие, но одновременное связывание не всплывающего события приведет к сбою catchEventName для элемента! .prevent можно убить напрямую, потому что в апплете нет события по умолчанию, например, submit не переходит на страницу .capture поддерживает 1.0.9 .self не имеет идентифицируемой личности .once тоже не может этого сделать, потому что в апплете нет removeEventListener.Хотя это можно обработать прямо в handleProxy, это очень неэлегантно и идет вразрез с первоначальным замыслом, поэтому я пока не буду его рассматривать.
  • В апплете вообще нет клавиатуры для других модификаторов ключ-значение, т.е. . .

Привязка событий Wepy отличается от vue и обеспечивает оптимизацию синтаксиса на основе собственных событий апплета.

привязать событие
замените bindtap="click" на @tap="click",
отменить пузырение
Замените оригинальный catchtap="click" на @tap.stop="click".

Захват событий прослушивания
замените Capture-bind:tap="click" на @tap.capture="click",
Монитор перехвата прерываний
захват-ловля: тап = "клик" Заменить @ tap.capture.stop = "клик".

Обработка событий для элементов Taro очень похожа на обработку событий для элементов DOM. Но есть небольшая синтаксическая разница:

Свойства привязки событий Таро названы в верблюжьем регистре, а не в нижнем регистре. Если вы используете синтаксис JSX, вам нужно передать функцию в качестве обработчика события вместо строки (способ написания элементов DOM). Например, традиционный шаблон апплета WeChat:

Таро немного отличается:

Другое отличие Taro заключается в том, что вы не можете использовать catchEvent для предотвращения всплытия событий. Вы должны явно использовать stopPropagation. Например, чтобы событие не всплывало, вы можете написать:

запрос запрос

Wepy модифицировал wx.request для приема параметров, стоит отметить, что он предоставляет глобальный перехватчик intercapter.

перехватчик

Taro дважды инкапсулирует запрос, вы можете использовать Taro.request(OBJECT) для инициации сетевых запросов и поддержки использования Promise.

mpvue не делает специальной оптимизации для запроса, который совпадает с исходным, и может быть инкапсулирован сам по себе по мере необходимости.

государственное управление

  • Wepy может относиться к Redux и Mbox.В настоящее время redux интегрирован в строительные леса wepy, вы можете выбрать то, что вам нужно;
  • mpVue использует vuex;
  • таро использует Redux;

Как выбрать подходящий для вас проект

  • Если вам нужно только сделать апплет WeChat, выберите mpvue или taro в соответствии с вашим собственным фреймворком.
  • Если текущий старый проект хочет перейти на программу, а старый проект разработан с помощью vue, рекомендуется использовать mpvue или wepy.
  • Если это старый проект, разработанный с помощью React и нуждающийся в частичной миграции апплета, рекомендуется использовать taro
  • Если это новый проект, и новый проект должен поддерживать апплет WeChat и апплет Alipay одновременно, рекомендуется использовать собственную разработку, потому что поддержка перевода текущей платформы для апплета Alipay не очень хороша, и ее трудно найти и изменить, если есть проблема Демонстрационные проекты, которые не включают слишком много логики, могут использовать фреймворк в качестве раннего внедрения, но если он включает слишком много логики взаимодействия, не рекомендуется использовать перевод фреймворка. в основном то же самое, что и апплет на уровне представления, рекомендуется вручную изменить и заменить некоторые методы и заменить некоторые атрибуты или имена файлов глобально, например, заменить wxml на axml, соотношение времени ручного преобразования составляет примерно четыре к одному; конечно , если есть достаточно людей, чтобы разработать один на одном конце, это лучше всего ...

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