После завершения проектирования в прошлом году был разработан апплет для изучения английского языка с использованием родного языка апплета.(умное изучение английского языка "")После этого я год не писал ни одной маленькой программы. Недавно по прихоти я собираюсь использовать очень популярный Taro (похожий на реакцию синтаксис, мультитерминал) для разработки апплета входа в класс, шагнуть в яму и почувствовать ее.
Резюме этой статьи
- Использование Taro, избыточная разработка отображения апплета регистрации учеников в классе
- *Основное использование Таро
- * Как разработчик React, меры предосторожности при использовании (только те, которые встречаются на практике)
- Обработка в фактической разработке
- Краткое изложение проблем, возникших при разработке апплета Taro и WeChat
- TODO
1. Войдите в апплет
Исходный код нажмите здесь"""Обзор функций: платформа регистрации на основе географического положения (широта и долгота). Кроме того, он включает в себя модуль новостей кампуса, модуль загрузки данных Word, модуль личной информации и т. д. Отсканируйте код для входа: номер учетной записи Student Experience 123456, пароль 123456.
1. Регистрация на основе широты и долготы Tencent API
2. Раздел новостей, загрузка данных слова
3. Модуль личной информации
Во-вторых, основное использование Таро.
-
yarn global add @tarojs/cli
, используйте пряжу для установки CLI -
taro init myApp
Создавайте проекты шаблонов (шаблоны генераторов для redux, mobx и т. д. можно создать, выполнив ряд команд по умолчанию). И тогда зависимости будут установлены по умолчанию. -
npm un dev:weap
, войдите в инструмент разработки WeChat, чтобы просмотреть собственный апплет. - Конкретные компоненты похожи на API и апплет, вы можете просмотретьДокументация ТароУзнайте сами.
- После этого разработка аналогична React. Уведомление
componentDidShow、 componentDidMount
Различные проявления жизненного цикла апплета. вкладкаcomponentDidMount
Просто сходите один раз.
Примечания: Taro по умолчанию оборачивает асинхронный API апплета, который можно вызывать так же, как с помощью Promise.
// WX
wx.request({
url: '', // 仅为示例,并非真实的接口地址
data: {},
header: {
'content-type': 'application/json' // 默认值
},
success(res) {}
})
// Taro
Taro.request(url).then(function (res) {
console.log(res)
})
3. Как разработчик React, меры предосторожности при использовании (в том числе только те, которые встречаются на практике)
-
sourcemap
Это очень ххххх, если вы не можете его использовать - Невозможно деконструировать передачу по значению, нужно
key value
передается дочерним компонентам - не может быть в
render
писать снаружиjsx
-
this.props
Передаваемая функция должнаon
илиdispatch
начало - из родительского компонента
props
, должен быть определен вstatic defaultProps
, иначе не получить -
componentDidMount
, в апплете WeChat/Baidu/ByteDance/Alipay этот метод жизненного цикла соответствуетonLaunch
-
componentDidShow
Этот метод жизненного цикла соответствует апплету WeChat/Baidu/ByteDance/Alipay.onShow
-
componentDidHide
Этот метод жизненного цикла соответствует апплету WeChat/Baidu/ByteDance/Alipay.onHide
- Одинарные кавычки должны быть написаны в коде JS, особенно в JSX, если появляются двойные кавычки, это может вызвать ошибки компиляции.
- переменная среды
process.env
использование, не используйте деструктурирование для полученияenv
настроенprocess.env
Переменные среды, пожалуйста, напишите их напрямуюprocess.env.NODE_ENV
использовать - использовать
this.$componentType
судить о текущемTaro.Component
Будь то страница или компонент, возможные значенияPAGE
а такжеCOMPONENT
- Компоненты без состояния не поддерживаются
- не может содержать элементы JSX
map
используется в циклеif
выражение - нельзя использовать
Array#map
Методы, отличные от управления массивами JSX - Чтобы передать функцию из родительского компонента в дочерний, имя свойства должно начинаться с
on
начало Выше приведены проблемы, возникающие во время использования,Дополнительные примечания см. в официальной документации.
В-четвертых, обработка в реальном развитии
1. Псевдоним тоже можно использовать.
// config/index.js
alias: {
'@actions': path.resolve(__dirname, '..', 'src/actions'),
'@assets': path.resolve(__dirname, '..', 'src/assets'),
'@components': path.resolve(__dirname, '..', 'src/components'),
'@constants': path.resolve(__dirname, '..', 'src/constants'),
'@reducers': path.resolve(__dirname, '..', 'src/reducers'),
'@style': path.resolve(__dirname, '..', 'src/style'),
'@util': path.resolve(__dirname, '..', 'src/util')
},
2. Простая обработка taro.requset()
// feth.js
import Taro from '@tarojs/taro'
const defaultMethod = 'POST'
const successStatus = 200
const successFlag = 1
const messageToast = title => {
Taro.showToast({
title,
icon: 'none',
duration: 1000
})
}
export default function fetch(options) {
const {
url,
method = defaultMethod,
params,
showErrorToast = true,
} = options
return Taro.request({
url,
method,
data: params,
}).then(response => {
const { statusCode, data } = response
// 不是200以外的
if (statusCode != successStatus) {
const { error } = data
// reject出去。showToast在catch里执行。
const errMessage = {errMsg: error || '请求接口失败'}
return Promise.reject(errMessage)
} else {
// flag是不是1的判断
const { flag, message, data: datas } = data
if (flag == successFlag) {
return Promise.resolve(datas)
} else {
const errMessage = {errMsg: message || '流程错误'}
return Promise.reject(errMessage)
}
}
}).catch(errors => {
const { errMsg } = errors
if (showErrorToast) {
messageToast(errMsg || '发起请求异常')
}
const errMessage = errMsg || '发起请求异常'
return Promise.reject(errMessage)
})
}
3. Нажмите кнопку, чтобы перейти к соответствующему узлу.
toggleComments = () => {
Taro.createSelectorQuery().select('#comments-id').boundingClientRect(function(rect){
// 使页面滚动到响应位置
Taro.pageScrollTo({
scrollTop: rect.bottom
})
}).exec()
}
5. Обзор проблем, возникших при разработке апплета Taro и WeChat.
1. Загрузите и просмотрите документы документа
В настоящее время апплет предоставляет API wx.downloadFile, но в настоящее время поддерживает только долгосрочную загрузку и загрузку трех типов файлов: изображения, голоса и видео. Файл документа будет загружен как файл .myword по временному пути, который можно просмотреть (встроенный браузер WeChat по умолчанию на телефонах Android открыт и может быть перенаправлен на компьютер. ios tbd).
Taro.showLoading()
const params = {
url,
fileType: "doc",
success(res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
const wxPath = res.tempFilePath
Taro.openDocument({
filePath: wxPath,
fileType: "doc",
success: function (ress) {
Taro.hideLoading()
console.log(ress)
},
fail: function (resfo) {
Taro.hideLoading()
util.showToast('打开文档失败')
}
})
}
},
fail: function (resfd) {
Taro.hideLoading()
util.showToast('文件下载失败')
},
}
Taro.downloadFile(params).then()
2. Получите географическое положение, широту и долготу для регистрации
wx.getLocation({
type: 'gcj02', // wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
success(res) {
const { latitude, longitude } = res
}
})
①, wx.getLocation, перед вызовом требуется авторизация пользователя. scope.userLocation
②, при инициировании кода сканирования и посещаемости знака, следует обеспечитьtype
такой же.
// 用户授权,app.js中配置项
permission: {
"scope.userLocation": {
"desc": "获取用户的签到位置"
}
},
3. Вы не можете долго нажимать, чтобы идентифицировать QR-код (подлежит уточнению) (кроме кода апплета)
После предварительного просмотра изображения QR-кода распознавание QR-кода не поддерживается.
getEventData(data, tag) {
return data.currentTarget.dataset[tag];
},
previewImage = (e) => {
const current = getEventData(e, 'src')
Taro.previewImage({
current: current, // 当前显示图片的http链接
urls: [current] // 需要预览的图片http链接列表
})
}
6. ЗАДАЧИ
- В полной мере используйте преимущества нескольких концов и попробуйте пакетный выпуск других небольших программ, h5 и т. д.
- Продолжайте следить за загрузкой документа Word и замените QR-код небольшим QR-кодом программы с параметрами (
wxacode.getUnlimited
) - Влияние openid на мультитерминал
эпилог
==Жало посуды, здоровяк слегка брызжет. Содержание грубое, пожалуйста, поправьте меня, если у вас есть какие-либо вопросы. ==
Стоит похвалиться, что скорость обработки апплета по-прежнему очень высока, и проверку он прошел в течение двух часов.