Qu'est-ce que Markup ?
Markup est un système de modèles réactifs JavaScript conçu pour simplifier la façon dont vous créez des interfaces utilisateur Web à l'aide des normes Web avec des améliorations minimales possibles des API Web natives.
Il se compose de 3 API principales avec des utilitaires supplémentaires pour simplifier encore plus les choses :
htmlUne fonction balisée JavaScript qui vous permet de représenter le DOM à l'aide de chaînes littérales de modèle.stateUne API simple de suivi d'état qui vous permet de définir des données réactives comme vous le souhaitez.effectUn moyen simple de définir les événements qui doivent se produire lorsque certains états changent.
Pourquoi avons-nous besoin d’un autre outil ?
Le développement Web moderne est devenu fortement dépendant d'étapes de construction complexes, de configuration du compilateur et de dépendances massives au framework. Souvent, tout ce que vous voulez faire est de créer une interface réactive, mais vous finissez par devoir configurer Vite, Babel, Webpack, Svelte ou React juste pour obtenir une réactivité d'état de base.
Markup existe pour résoudre ce problème. Il comble le fossé entre la manipulation brute et fastidieuse de DOM et les frameworks de composants lourds. En utilisant les primitives JavaScript modernes, en particulier les littéraux de modèle et les fonctions, Markup offre une réactivité propre, déclarative et chirurgicalement précise sans aucune étape de construction.
Comparez la façon dont vous construisez un compteur simple.
La méthode fastidieuse en JavaScript natif
let count = 0
// tedious DOM definition and manipulation
const p = document.createElement('p')
p.textContent = `count: ${count}`
const btn = document.createElement('button')
btn.type = 'button'
btn.textContent = 'count up'
// limiting event driven
btn.addEventListener('onclick', () => {
count += 1
p.textContent = `count: ${count}`
if (count > 10) {
alert('You counted passed 10!')
}
})
document.body.append(p, btn)La méthode Markup (simple et réactive)
// reactive data
const [count, updateCount] = state(0)
// data driven
effect(() => {
if (count() > 10) {
alert('You counted passed 10!')
}
})
const countUp = () => {
updateCount((prev) => prev + 1)
}
// reactive DOM/templates
html`
<p>count: ${count}</p>
<button type="button" onclick="${countUp}">count up</button>
`.render(document.body)Concepts de base
1. Fonctions pour l'évaluation paresseuse
La réactivité de Markup est optimisée par les fonctions natives de JavaScript. Étant donné que les fonctions représentent des évaluations paresseuses, elles peuvent être exécutées chaque fois que leur état sous-jacent change. Envelopper vos valeurs ou modèles dans des fonctions est le secret des mises à jour chirurgicales DOM de Markup.
2. Littéraux de modèle balisés
Markup utilise le littéral de modèle balisé standard html pour représenter le DOM. Pas d'analyseur JSX, pas de syntaxe de modèle propriétaire et pas de Virtual DOM. Ce que vous écrivez est analysé directement dans les modèles natifs HTML et mis à jour chirurgicalement.
Avantages clés
- 🚀 Zéro étape de construction : aucun compilateur, aucun bundler, aucune installation npm requise pour commencer. Déposez le lien CDN dans une balise
<script>et commencez à coder. - ⚡ Mises à jour chirurgicales DOM : aucune différence virtuelle DOM. La cible Markup met à jour uniquement les nœuds et attributs spécifiques qui ont été modifiés.
- 📦 Ultra léger : avec seulement 7,6 Ko gzip (18 Ko non compressés), il est parfait pour les micro-frontends, les widgets, les prototypes et les applications Web légères.
- 🔌 Standard Web Components : s'intègre facilement à Web Components pour fournir un rendu réactif et une gestion simplifiée du cycle de vie.