Эта статья одновременно публикуется в моем блоге:xueshiming.cn
Советы: сначала немного галантереи
wx: ключ больше, чем уникальный идентификатор
Когда данные списка изменяются и страница повторно отображается, элементы в списке могут сохранять свое собственное состояние.
например, вinput
В компоненте после ввода содержимого
После отображения страницы не нужноinput
Содержание изменилось, вам нужно использовать это свойство
Это свойство, когда страница повторно отображается, убедитесь, что оно установлено сkey
Компоненты переупорядочиваются, а не перерисовываются, что повышает эффективность отрисовки страницы.
Дополнительно: если не указаноwx:key
, сообщитwarning
, вы можете игнорировать его, если знаете, что список является статическим, или если вам не важен его порядок.
Блок — это элемент упаковки, а не компонент, после рендеринга страницу не видно
wx: разница между if и hidden
wx:if
Существует локальный процесс рендеринга при переключении, чтобы гарантировать, что при рендеринге условного блока его можно будет уничтожить и повторно рендерить с более высоким потреблением переключения.hidden
Всегда рендерить. Может управлять отображением и скрывать в представлении с более высокой начальной стоимостью рендеринга,
Поэтому, если элементы часто переключаются, используйтеhidden
wxml поддерживает ссылки на файлы
import
: может ссылаться только на блок содержимого шаблона, где мы определяем файл шаблона
template
Шаблоны, если другие шаблоны вложены в целевой файл, не будут ссылаться, что позволяет избежать проблемы бесконечных циклов ссылочных шаблонов.
include
: ввести весь код в целевой файл, кроме блока кода шаблона, что эквивалентно копированию вinclude
место здесь
Сравнение wxss и css
единица размера rpx
Сначала поймите несколько понятий:
-
设备像素
: наименьшая физическая единица отображения, которой может управлять устройство. Эта минимальная физическая единица представляет собой точку на экране, и точка фиксирована. -
CSS像素
: Концепция внешнего программирования, логические пиксели, используемые в коде css -
PPI/DPI
: количество пикселей на дюйм
-
DPR
: отношение пикселей устройства к пикселям CSS в определенном направлении телефона.
несмотря на то чтоwxss
служба поддержкиrem
, но мы знаемrem
основывается наhtml
корневого элементаfontSize
размер, чтобы соответствовать,wxss
не может работать напрямуюhtml
атрибут стиля, поэтомуrem
План адаптации недействителен.rpx
Появился, указанная ширина экрана750rpx
, чтобы мы могли адаптироваться к ширине экрана,rpx
а такжеrem
Реализация похожа, иrpx
наконец-то превратился вrem
импорт стиля
-
Введение в стиль контура:
@import ‘./ss.wxss’
-
Введение в встроенный стиль:
style
Обычно используется для написания динамических стилей
Селектор
приоритет
Обычно используется, когда вы хотите изменить стиль других плагинов.!import
Механизм работы мини-программы
Существует два метода запуска апплета: холодный запуск и горячий запуск.
- Горячий перезапуск: если пользователь уже открыл определенный апплет и снова открывает его в течение определенного периода времени, нам больше не нужно перезапускать в это время, что требует переключения нашего апплета, открытого в фоновом режиме, на передний план для использования.
- Холодный запуск: когда пользователь открывает апплет в первый раз или активно уничтожается и повторно открывается WeChat, апплет необходимо перезагрузить и запустить.
Когда апплет будет активно уничтожен?
- После того, как апплет перейдет в фоновый режим, клиент поможет нам поддерживать состояние в течение определенного периода времени, по прошествии более пяти минут он будет активно уничтожен WeChat.
- Когда мы получаем два последовательных системных сигнала тревоги за короткий промежуток времени, WeChat будет активно уничтожен, а короткий временной интервал составляет 5 секунд.
Механизм обновления мини-программы:
Когда апплет сталкивается с обновлением версии во время холодного запуска, апплет будет загружен асинхронно, помогите нам загрузить последнюю версию пакета кода и использовать локальную версию пакета кода WeChat для запуска в то же время, то есть , последний пакет кода будет в апплете. Он будет загружен при следующем запуске. Если вы предпочитаете использовать последнюю версию пакета кода, мы можем использовать API для его обработки.
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
})
Механизм загрузки мини-программы:
В блок-схеме запуска апплета:
Часть слева — это запуск, некоторая логика взаимодействия на уровне представления и уровне логики в клиенте WeChat, а также операции доступа к кешу данных, когда апплет запускается, он будет отправлен вcdn
Чтобы запросить последний пакет кода, при первом запуске необходимо дождаться загрузки пакета кода и внедрения его в систему.webView
Страницу апплета можно увидеть только после ее выполнения в контейнере, поэтому в случае плохой сети мы почувствуем, что страница открывается медленно, и клиент поможет нам кэшировать пакет кода локально, когда мы запустим его в следующий раз. время, мы начнемcdn
Запросите, доступна ли последняя версия пакета кода.
Приложение апплета и жизненный цикл страницы:
Жизненный цикл приложения апплета: onLaunch, onShow, onHide, onError
Первый вход в апплет изcdn
Или апплет получает пакет кода локально и внедряет его в работающую среду,
Клиент WeChat предоставит нам логический уровеньapp.js
изapp
экземпляр для отправкиonLaunch
мероприятие,
На логическом уровне,app.js
изapp
в параметрах конструктораonLaunch
метод будет вызван.
когда пользователь используетhome
файл или нажмите кнопку закрытия апплета в правом верхнем углу, чтобы закрыть апплет, аплет не уничтожается напрямую.app
в параметрах конструктораonHiede
Будет вызван метод. Когда мы снова открываем апплет, WeChat вызывает апплет,onShow
будет вызван метод,
когда сценарий апплета находит ошибку илиapi
Если вызов не удался, он будет вызванonError
.
Жизненный цикл страницы апплета: onLoad, onShow, onReady, onHide, onUnload,
Прежде чем страница будет уничтожена,onLoad
Позвонит только один раз,
После отображения страницы она вызовет экземпляр Page.onShow
После первого рендеринга страницыonReady
будет вызван, он будет вызван только один раз, прежде чем страница будет уничтоженаonReady
После триггера логический слой и слой представления взаимодействуют,
Когда мы открываем новую страницу на текущей странице, текущая страница будет запускатьсяonHide
,
Срабатывает, если текущая страница закрытаonUnload
отвечает за просмотр страницыview
Служба обслуживания и обработки данных и обслуживания обслуживания потоков обслуживания,AppService
,
Совместная работа для завершения вызова жизненного цикла
Модель события мини-программы
1. Фаза захвата события
Связанное событие передается от самого внешнего узла к целевому элементу узла и, в свою очередь, проверяет, привязан ли переданный узел к функции обратного вызова слушателя того же типа события, и если да, то выполняет соответствующую функцию обратного вызова события.
2. Этап обработки события
После того, как событие достигнет целевого узла, оно вызовет функцию обратного вызова слушателя, привязанную к целевому узлу.
3. Фаза пузырька событий
Событие из целевого узла, пузыряясь к внешнему узлу, проверьте, если прошедший узел связан, одинаковое количество функций обратного вызова прослушивания, если существует, эта функция обратного вызова будет выполнена
target
Свойства: Текущий компонент, вызвавший событие.currentTarget
Атрибут: исходный компонент, вызвавший событие.
eg:
если есть внешний слойview
Есть еще внутренний слойview
вложенные, как черезbind
Привязать событие клика,target
для внешнего слояview
объект события компонента,currentTarget
для нижнего слояview
объект события компонента
-
type
Тип триггера, который запускает событие -
timestamp
Временная метка инициирующего события -
target
Исходный компонент, который инициирует событие, включая набор настраиваемых атрибутов идентификатора исходного компонента, который инициирует событие. -
currenTarget
Привязки событий для текущего компонента, включаяid
,Типы,data
Коллекция пользовательских свойств -
touches
представляет собой массив, каждый элемент которогоtouc
h object , идентифицирующий точку касания и информацию, которая в данный момент находится на экране. -
changedTouches
Это данные, которые идентифицируют точку касания, которая изменилась, то есть изменение текущей точки касания с существования на ничто или с нуля на существование. -
detail
Определите данные, переносимые каждым событием, нажмите событие: «Расстояние между точкой касания и левым верхним углом документа». Медиа-событие, состояние воспроизведения, когда событие было запущено, и отметка времени
Операционная среда мини-программы:
в разных средах
javascript
Среда запуска скрипта другая, апплет WeChat работает на трех терминалах:iOS(iPhone/iPad)
,Android
и инструменты разработчика для отладки.
Среда выполнения сценария с тремя терминалами и среда, используемая для рендеринга неродных компонентов, различаются:
-
существует
iOS
выше логический слой апплетаjavascript
код работает наJavaScriptCore
, слой представления состоит изWKWebView
Для рендеринга среда имеетiOS8
,iOS9
,iOS10
; -
существует
Android
начальство,- Старая версия, уровень логики апплета
javascript
код работаетX5 JSCore
, слой представления состоит изX5
на основеMobile
Chrome 57
Ядерные ядра - Новая версия, апплетный логический слой
javascript
код работает наV8
, слой просмотра разработанXWeb
двигатель на базеMobile Chrome 6
7 ядер для рендера;
- Старая версия, уровень логики апплета
-
В средстве разработки логический слой апплета
javascript
код работает наNW.js
, слой представления состоит изChromium 60 Webview
рендерить.
Вывод: при разработке небольших программ не забывайте понимать некоторые принципы и детали, потому что это ключ к совершенствованию.to be an engineer,not a coder.