Введение
стек технологий
- реагировать и тд
- Инструменты отладки упаковки:umijs,parcel
- Схема формы:form-render
- iframe-связь:postmate
- задняя часть:midwayjs2, МонгоДБ
Функция перетаскивания компонентов:
Особенности конфигурации компонента:
Для визуального построения вы можете прочитать эту статью:Инструменты построения визуализации страниц в прошлом и настоящем.
1. Целевая группа
Для разработчиков и обычных пользователей быстро сгенерируйте страницы H5. Иногда low-code более продуктивен, чем no-code, отходя от повторного использования компонентов «копировать-вставить». Для операторов они могут быстро создать маркетинговую страницу, а для разработчиков они могут легко добавлять и комбинировать компоненты, а также комбинировать небольшой объем кода для повторного использования предыдущих компонентов.
2. Точно восстановить проект дизайна
Большинство построенных страниц H5 имеют единицы px, и большинство из них — обычные пользователи, которые не обращают внимания на восстановление пикселей. Если согласно текущей схеме адаптации популярного мобильного терминала H5 ширина эскиза дизайна составляет 750px, и используются единицы измерения rem или vw, страница будет отображаться одинаково на экране каждого разрешения. Здесь наименьшая степень детализации наших компонентов — это блок.Разработчики восстанавливают компоненты в соответствии с черновиком дизайна и предоставляют настраиваемые элементы, такие как цвет, фон и копирайтинг, которые могут настраивать не разработчики. В то же время он также предоставляет некоторые основные компоненты: изображения, форматированный текст, видеоэкраны и т. д., а также поддерживает создание простой страницы без дизайна.
3. Дружественный опыт разработки компонентов
Большинство проектов визуализации с открытым исходным кодом сосредоточены на пользовательском опыте, а часть разработки материалов игнорируется. если вы использовалиstorybook, вы почувствуете, что следующая часть разработки компонента очень похожа на нее, и даже избавляет от необходимости писать код сопоставления между реквизитами и формами, вы можете напрямую перетаскивать их для создания. Конечно, storebook предназначен для облегчения написания, организации и тестирования компонентов, и некоторые идеи в проекте также позаимствованы из storebook.
4. Объем страницы вывода, контроль версий
Достижение онлайн-стандарта, а не демонстрационного этапа, требует рассмотрения, например, «как обрабатывать зависимые компоненты на опубликованной странице после обновления компонента». В настоящее время контроль версий не реализован, и в основном рассматриваются несколько способов реализации:
- Каждый раз, когда создается страница в сочетании с ci для запуска сборки базы H5, файлы сборки генерируются для каждого проекта отдельно, и последующие обновления компонентов и опубликованные страницы не будут затронуты.
- После каждого пересмотра выпуска компонента он отмечен номером версии и сохраняется в базе данных и опубликована на статический ресурсный сервер. Компоненты, используемые на соответствующей странице, вытягиваются в соответствии с номером версии, что похоже на концепцию Версия пакета NPM.
- Полностью разделить составные части, выпустить пакеты согласно версии npm и установить библиотеку компонентов соответствующей версии на базе H5, но этот метод слишком сложен для разработки.
Технические моменты
Режим макета: расположение сверху вниз
Обычно существует и абсолютная позиционная компоновка, хотя она очень гибкая, но не способствует комбинированию и расширению компонентов. Наименьшая единица компонента, установленная здесь, — это элемент уровня блока, занимающий строку, компоненты могут быть добавлены выше или ниже него, порядок может быть изменен, а также они могут быть скомпонованы и объединены в более крупные компоненты.
Холст: используйте iframe
Если модуль компонента использует vw, он предназначен только для использования iframe. К счастью, события перетаскивания элементов могут пересекать фреймы, а фреймам не нужно учитывать механизм песочницы, чтобы избежать загрязнения переменных и стилей, особенно для проектов с участием нескольких человек, таких как создание страниц.
Связь между IFRAME может быть реализована с помощью PostMessage, здесь рекомендуется библиотекаpostmate, который может легко использовать асинхронные промисы для доставки сообщений и вызовов методов.
технический пункт
Ниже показаны идеи дизайна, как разработать и использовать компонент для регистрации купонов.
1. Создайте компонент в соответствующей категории, система присвоит идентификатор для идентификации этого компонента.
2. Создайте компонент в локальном каталоге h5lib и экспортируйте его.
Здесь css восстанавливается согласно проекту дизайна 750px.
import React from 'react';
import style from './index.less';
export default function(props:any) {
//正常编写组件,这里我们接受3个可配属性
const {mainColor, fontColor, imgUrl} = props;
return (
<div className={style.loginContainer}>
<img className={style.img} src={imgUrl}/>
<div className={style.formItem}>
<div className={style.lable}>手机号</div>
<input className={style.input1} placeholder="请输入手机号"/>
</div>
<div className={style.formItem}>
<div className={style.lable}>验证码</div>
<input className={style.input2} placeholder="短信验证码"/>
<button className={style.codeBtn} type="button" style={{backgroundColor: mainColor, color: fontColor}}>获取验证码</button>
</div>
<button
className={style.submit}
type="button"
style={{backgroundColor: mainColor, color: fontColor}}
>立即领取</button>
</div>
);
}
// 导出时使用刚才分配的id作为key,并使用import()语法方便后续组件异步加载
export default {
'6045ca8adf8e607d29d0bffb': import('../h5Lib/business/LoginCoupon'),
};
3. Перетащите начальное значение компонента конфигурации
На предыдущем шаге наш компонент принимает три реквизита: mainColor, fontColor, imgUrl.Вы можете напрямую перетаскивать селектор цвета и элемент управления загрузкой изображения для создания элементов формы.
Этой форме частично помогаетform-renderРеализация, которая в итоге сгенерирует схему, описывающую элемент формы:
Если этот шаг сравнить с книгой хранения, то он заключается в ручном написании кода частичного сопоставления ручек.
4. Затем вы можете с удовольствием перетащить, чтобы создать полную страницу.
5. Мобильный телефон посещает сгенерированную страницу
Предварительный просмотр компонентов и страниц черезhtml2canvasГенерируется автоматически.
Встроенную страницу также можно установить в качестве шаблона, и шаблон можно использовать для быстрого создания маркетинговой страницы с аналогичной структурой:
Мобильный телефон сканирует QR-код:
Вы можете просмотреть его в хроме, и компонент также реализует асинхронную загрузку, поэтому вам не нужно беспокоиться о медленной загрузке, вызванной расширением библиотеки компонентов. Среди них компонент входа в систему должен точно восстанавливать эскиз проекта и использовать модуль vw.
// 异步加载组件示例(首先得打包成异步组件,本项目使用parcel结合import()语法):
const fetchComponents = async function(pageSchema:IPageSchem){
const tasks:any[] = [];
pageSchema.forEach((page)=>{
page.components.forEach((component)=>{
const load = new Promise(async(resolve, reject)=>{
const asyncComponent = componentList[component._id];
if(asyncComponent){
const timeStemp = new Date().getTime();
const loadedComponent = (await asyncComponent).default;
resolve({
_id: component._id,
name: component.name,
component: loadedComponent,
takeUp: new Date().getTime() - timeStemp,
});
}else{
reject(`组件: ${component._id}加载失败`);
}
});
tasks.push(load);
});
});
try {
const loadedComponents = Promise.all(tasks);
return loadedComponents;
} catch (error) {
throw error;
}
};
Структура проекта
Проект разделен на два: H5 Construction, Pedestal H5.
Я также пытался использовать в проекте несколько хороших библиотек (некоторая путаница):
- Формируйте решения для сложных фоновых сценариев:formily
- Управление состоянием для React Hooks:unstated
В настоящее время некоторые функции все еще находятся в стадии разработки, а серверный проект еще не является открытым исходным кодом. Если вы считаете, что это хорошо, добавьте звезду и обратите внимание на последующие итерации.GitHub.com/контакт 544690189…
Сборка H5:
- Разработка и сборка с использованием umi
- Ответственный за разработку компонентов, управление, перетаскивание, проекты генерации страниц
-
.umirc.ts
pxToViewPort настраивается вh5lib
Каталог px to vw (черновик дизайна 750px) - Холст H5 (iframe) при оформлении страницы не реализуется "базой H5" ниже. Большинство из них имеют одинаковые функции, но один используется только на этапе разработки и дизайна, а другой используется в производственной среде . Существуют функциональные и функциональные различия, поэтому они разделены.
dev
npm run dev:design
build
npm run build:design
База H5:
- Разработка и сборка используют парцеллы
- Отвечает за окончательную отрисовку страницы
- Динамически загружать компоненты
- TODO: вы можете напрямую ввести json-схему страницы в
index.html
, или выложите на cdn, чтобы сократить время рендеринга первого экрана
dev
npm run dev:mobile
build
npm run build:mobile
Перспектива
Хотя проект написан на React, он пока поддерживает только компоненты React.Теоретически, из процесса «схема -> компоненты» нет ограничений по языку и фреймворку, и его могут поддерживать как vue, так и небольшие программы, но нужно поставить "схема -> Компоненты" средний слой можно заменить.