Conceptos
Editor
6 min
todos los comportamientos, contenido y estado de un editor de slate se agrupan en un solo objeto de nivel superior editor tiene una interfaz de interface editor { children node\[] selection range | null operations operation\[] marks record\<string, any> | 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 insertfragment (fragment node\[]) => void insertnode (node node) => void inserttext (text string) => void removemark (key string) => void } es ligeramente más complejo que los otros, porque contiene todas las funciones de nivel superior que definen tus comportamientos personalizados y específicos de dominio la children contiene el árbol de nodos del documento que compone el contenido del editor la selection contiene la selección actual del usuario, si la hay la operations contiene todas las operaciones que se han aplicado desde que se realizó el último "cambio" (dado que slate agrupa las operaciones en ticks del bucle de eventos ) el marcadores almacena formato que se aplicará cuando el editor inserte texto si marcadores es nulo , el formato se tomará de la selección actual comportamientos de sobrescritura en guías anteriores ya hemos insinuado esto, pero puedes sobrescribir cualquiera de los comportamientos de un editor sobrescribiendo sus propiedades de función por ejemplo, si deseas definir elementos de enlace que son nodos en línea const { isinline } = editor editor isinline = element => { return element type === 'link' ? true isinline(element) } o tal vez quieras sobrescribir el insertartexto comportamiento para "enlazar" urls const { inserttext } = editor editor inserttext = text => { if (isurl(text)) { // return } inserttext(text) } o incluso puedes definir "normalizaciones" personalizadas que se realicen para asegurar que los enlaces cumplan con ciertas restricciones const { normalizenode } = editor editor normalizenode = entry => { const \[node, path] = entry if (element iselement(node) && node type === 'link') { // return } normalizenode(entry) } siempre que sobrescribas comportamientos, asegúrate de llamar a las funciones existentes como un mecanismo de respaldo para el comportamiento predeterminado a menos que realmente quieras eliminar completamente los comportamientos predeterminados (lo cual rara vez es una buena idea) 🤖 para más información, consulta el docid\ bh3thnehmuw74stzowtli funciones auxiliares el editor interfaz, como todas las interfaces de slate, expone funciones auxiliares que son útiles al implementar ciertos comportamientos hay muchos, muchos ayudantes relacionados con el editor por ejemplo // 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) también hay muchos ayudantes basados en iteradores, por ejemplo // 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)) { // } 🤖 para más información, consulta el docid\ bh3thnehmuw74stzowtli
