createContext API
Crea un context per condividere dati tra componenti discendenti.
Creazione
createContext crea un valore leggibile dai componenti discendenti senza passare props attraverso ogni livello intermedio.
import { createContext } from 'wompo';
export const SessionContext = createContext({
user: 'Guest',
plan: 'Free',
});L'argomento e' il valore predefinito. Wompo lo usa solo quando un componente chiama useContext(SessionContext) senza un provider sopra di lui.
Provider
Renderizza Context.Provider sopra i componenti che devono leggere il valore. Il provider riceve una prop obbligatoria: value.
function App() {
const session = {
user: 'Ada',
plan: 'Pro',
};
return html`
<${SessionContext.Provider} value=${session}>
<${Dashboard} />
</${SessionContext.Provider}>
`;
}Quando il valore del provider cambia, i discendenti che chiamano useContext vengono renderizzati di nuovo con il nuovo valore.
Consumer
Leggi il valore con useContext.
import { html, useContext } from 'wompo';
import { SessionContext } from './session-context.js';
function AccountBadge() {
const session = useContext(SessionContext);
return html`
<p>
${session.user} usa il piano ${session.plan}.
</p>
`;
}Esempio: session provider
Questo esempio mantiene lo stato della sessione in un componente e permette ai figli annidati di leggerlo senza ricevere props esplicite.
import { createContext, defineWompo, html, useContext, useState } from 'wompo';
const SessionContext = createContext({
user: 'Guest',
plan: 'Free',
});
function SessionCard() {
const session = useContext(SessionContext);
return html`
<article>
<strong>${session.user}</strong>
<span>Piano ${session.plan}</span>
</article>
`;
}
function AccountArea() {
const [session, setSession] = useState({
user: 'Ada',
plan: 'Free',
});
const upgrade = () => {
setSession({
...session,
plan: 'Pro',
});
};
return html`
<${SessionContext.Provider} value=${session}>
<${SessionCard} />
<button @click=${upgrade}>Upgrade</button>
</${SessionContext.Provider}>
`;
}
defineWompo(AccountArea);attrs - API Wompo
Usa attrs per distribuire attributi ed eventi su un elemento in un template.
createPortal - API Wompo
Usa createPortal per modal, tooltip e layer globali.