ampproject / ampproject/amp-react-prototype

Controlled vs uncontrolled lightbox

Abierto
#43 0 comentarios 0 reacciones 0 asignados Ver en GitHub
TBD
Lenguaje dominante
JavaScript
Estrellas
36
Forks
6
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
javascript, react
Área
design, frontend
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.