Exemple d’un composant utilisant un autre composant
Cet exemple présente un composant permettant de sélectionner une vidéo YouTube dans un menu et de la jouer automatiquement grâce à la réutilisation du composant YouTube Player.
Description du composant
Le composant est une fonction nommée YouTubeSelector
acceptant 5 propriétés et retournant un tableau contenant 2 éléments HTML, un élément<select>
et un élément <iframe>
.
Les 5 propriétés sont :
videos
: un tableau d’objets contenant qui est utilisé pour construire l’élément HTML<select>
et contenant un identifiant de vidéo YouTube et un titre,id
: une chaîne de caractères utilisée comme valeur de l’attributid
de l’élément<iframe>
,classes
: une chaîne de caractères utilisée comme valeur de l’attributclass
de l’élément<iframe>
,width
: un nombre utilisé comme utilisé valeur de l’attributwidth
de l’élément<iframe>
,height
: un nombre utilisé comme utilisé valeur de l’attributheight
de l’élément<iframe>
.
La propriété videos
est requise (les autres pas) et doit contenir un tableau à minima vide ([]
). Un objet du tableau d’objets doit être constitué d’une propriété videoId
et d’une propriété title
contenant respectivement l’identifiant d’une vidéo YouTube (ou vide ""
) et un titre.
Un exemple de tableau :
const videos = [
{videoId: "", title: "Sélectionnez une vidéo"},
{videoId: "I6ezWUaHAgo", title: "Fontômas"},
{videoId: "uMde180AbpE", title: "Fantômas se déchaîne"},
{videoId: "PGk5CYBw23o", title: "Fantômas contre Scotland Yard"}
];
Code du composant
Le code du composant est représenté ici.
function YouTubeSelector({videos, id, classes, width, height}) {
const {select, option} = Room.elements();
const videoId = Room.createData("");
return [
select(
{onChange: e => videoId.value = e.target.value},
videos.map(({videoId, title}) => option({value: videoId}, title))
),
YouTubePlayer({videoId, id, classes, width, height, vars: {autoplay: 1}})
];
}
Une donnée observable videoId
est créée dans le composant avec la fonction createData()
de Room et sa valeur est modifiée en cas de changement de la valeur sélectionnée dans l’élément <select>
. La donnée videoId
étant utilisée par le composant YouTube Player qui est capable de réagir sur cette donnée, un changement dans le menu engendre automatiquement le chargement d’une nouvelle vidéo par changement de la valeur de l’attribut src
de l’<iframe>
.
Utilisation du composant
Avec un tableau videos
comme présenté plus haut, le composant retournant un tableau de deux éléments HTML, il y a plusieurs solutions pour l’ajouter dans un autre élément :
// Par décomposition
element.append(...YouTubeSelector({videos, width: 960, height: 540}));
// Avec Room
Room.append(element, YouTubeSelector({videos, width: 960, height: 540}));
Ce qui donne le résultat suivant :
Dernière mise à jour :