ampproject / ampproject/amp-react-prototype

Controlled vs uncontrolled lightbox

Aperta
#43 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
TBD
Lingua principale
JavaScript
Stelle
36
Fork
6
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

AMP's lightboxes are components with completely separate "roots" and lifecycle. They only supply imperative APIs such as:

```
lightbox.open().then(result => {
// Lightbox has closed with a possible return value.
});
```

A classical approach in React would use a controlled style:
```
export function Demo() {
const [open, setOpen] = React.useState(false);
return (


setOpen(true)}>Open
setOpen(false)}>...

);
}
```

There are some benefits when using a controlled style. But there are also some nuances to consider:
1. Open state has to be controlled. This expands the required API surface. I.e. to use the `XDialog`, one must manage `open` state, supplied as a property, and handle `onClose`.
2. Out-of-lightbox closing has to be non-vetoable. This can probably be remedied by an additional `onCloseRequest` event callback.
3. AMP element itself has to be uncontrolled since DOM elements do not have controlled/uncontrolled concept. Thus we'd have to remap the controlled state to imperative DOM APIs.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start by reviewing the issue's lightbox.open() example and the controlled XDialog example, then compare the listed state, close, and DOM API concerns. Done is not defined in the issue; the open design questions would need a decided controlled or uncontrolled API and documented behavior.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, react
Ambito
design, frontend
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.