[Веб-компоненты][1] на основе движка [JSX][2] и [TypeScript][3].
[][4]
[
][5]
[][6]
[
][7]
[][8]
[
][9]
[][10]
[][11]
Демоверсия и шаблон GitHub: https://web-cell.dev/scaffold/.
Команда:
npm init -y
npm install web-cell
npm install parcel-bundler -D
package.json
:
{
"scripts": {
"start": "parcel source/index.html --open",
"build": "parcel build source/index.html --public-url"
}
}
source/index.html
:
<script
crossorigin
src="https://polyfill.app/api/polyfill?features=es.array.flat,es.object.from-entries"
></script>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2.5.0/webcomponents-bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2.5.0/custom-elements-es5-adapter.js"></script>
<script src="https://cdn.jsdelivr.net/npm/element-internals-polyfill@0.1.1/dist/index.min.js"></script>
<script src="source/SubTag.tsx"></script>
<script src="source/TestTag.tsx"></script>
<sub-tag></sub-tag>
<test-tag></test-tag>
source/SubTag.tsx
:
import { createCell, component, mixin } from 'web-cell';
export function InlineTag({ defaultSlot }: any) {
return <span>{defaultSlot}</span>;
}
@component({
tagName: 'sub-tag',
renderTarget: 'children'
})
export class SubTag extends mixin() {
render() {
return <InlineTag>test</InlineTag>;
}
}
source/TestTag.tsx
:
import {
createCell,
component,
mixin,
attribute,
watch,
on,
Fragment
} from 'web-cell';
import { SubTag } from './SubTag';
interface Props {
title?: string;
}
interface State {
status: string;
}
@component({
tagName: 'test-tag',
style: {
'.title': {
color: 'lightblue'
},
'.title.active': {
color: 'lightpink'
}
}
})
export class TestTag extends mixin<Props, State>() {
@attribute
@watch
title = 'Test';
state = { status: '' };
onClick = () => (this.title = 'Example');
@on('click', ':host h1')
onDelegate() {
this.setState({ status: 'active' });
}
render({ title }: Props, { status }: State) {
return (
<>
<h1 title={title} className={`title ${status}`}>
{title}
<img alt={title} onClick={this.onClick} />
<SubTag />
</h1>
</>
);
}
}
disconnectedCallback
Scaffolds
Basic.
DashBoard.
Static site.
Ecosystem
Мы рекомендуем использовать следующие библиотеки с WebCell:
— управление состоянием: MobX (также работает на TypeScript и Decorator);
— маршрутизатор: Cell Router;
— компоненты пользовательского интерфейса: * BootCell (основан на Bootstrap v4), * Material Cell (основан на Material Design и Bootstrap v4), * GitHub Web Widget;
— HTTP-запрос: KoAJAX (основан на Koa-подобных промежуточных программах);
— утилиты: Web utility (методы и типы);
— поток событий: Iterable Observer (предложение Observable);
— интеграция Markdown: MarkCell (реализация MDX).
Roadmap
[ ] Серверная отрисовка (https://web.dev/declarative-shadow-dom/).
Перейдите к [вкладу]!
В данном ответе не удалось перевести некоторые фрагменты текста, так как они содержат ссылки на внешние ресурсы.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )