Éditeur
6 min
tous les comportements, le contenu et l’état d’un éditeur slate sont regroupés dans un seul objet éditeur il présente l’interface suivante interface editor { // current editor state children node\[] selection range | null operations operation\[] marks omit\<text, 'text'> | null // schema specific node behaviors isinline (element element) => boolean isvoid (element element) => boolean normalizenode (entry nodeentry) => void onchange () => void // overrideable core actions addmark (key string, value any) => void apply (operation operation) => void deletebackward (unit 'character' | 'word' | 'line' | 'block') => void deleteforward (unit 'character' | 'word' | 'line' | 'block') => void deletefragment () => void insertbreak () => void insertsoftbreak () => void insertfragment (fragment node\[]) => void insertnode (node node) => void inserttext (text string) => void removemark (key string) => void } il est légèrement plus complexe que les autres, car il contient toutes les fonctions de niveau supérieur qui définissent vos comportements personnalisés et spécifiques au domaine la propriété enfants contient l’arborescence des nœuds qui constituent le contenu de l’éditeur la propriété sélection contient la sélection actuelle de l’utilisateur, le cas échéant ne la définissez pas directement ; utilisez transforms select docid\ ohutgo yl7a9int0rn0rp la propriété opérations contient toutes les opérations qui ont été appliquées depuis le dernier « change » traité (slate regroupe les opérations en lots correspondant aux cycles de la boucle d’événements ) la propriété notes stocke le formatage à appliquer lorsque l’éditeur insère du texte si notes vaut null , le formatage sera déterminé à partir de la sélection actuelle ne la définissez pas directement ; utilisez editor addmark et editor removemark remplacement de comportements dans les guides précédents, nous l’avons déjà évoqué, mais vous pouvez remplacer n’importe quel comportement d’un éditeur en surchargeant ses propriétés de fonction par exemple, si vous souhaitez définir des éléments de lien en tant que nœuds inline const { isinline } = editor editor isinline = element => { return element type === 'link' ? true isinline(element) } ou peut être souhaitez vous remplacer le comportement de inserttext pour « linkifier » les urls const { inserttext } = editor editor inserttext = text => { if (isurl(text)) { // return } inserttext(text) } ou vous pouvez même définir des « normalisations » personnalisées pour garantir que les liens respectent certaines contraintes const { normalizenode } = editor editor normalizenode = entry => { const \[node, path] = entry if (element iselement(node) && node type === 'link') { // return } normalizenode(entry) } lorsque vous remplacez des comportements, veillez à appeler les fonctions existantes comme mécanisme de secours pour le comportement par défaut sauf si vous souhaitez réellement supprimer complètement les comportements par défaut (ce qui est rarement une bonne idée) 🤖 pour plus d’informations, consultez la méthodes d’instance editor à remplacer référence api docid\ emmtio53 dod5rqvthcix fonctions utilitaires l’interface éditeur , comme toutes les interfaces slate, expose des fonctions utilitaires utiles lors de l’implémentation de certains comportements il existe de très nombreux utilitaires liés à l’éditeur par exemple // get the start point of a specific node at path const point = editor start(editor, \[0, 0]) // get the fragment (a slice of the document) at a range const fragment = editor fragment(editor, range) il existe également de nombreux utilitaires basés sur des itérateurs, par exemple // iterate over every node in a range for (const \[node, path] of editor nodes(editor, { at range })) { // } // iterate over every point in every text node in the current selection for (const point of editor positions(editor)) { // } 🤖 pour plus d’informations, consultez la méthodes statiques editor référence api docid\ emmtio53 dod5rqvthcix