Loading...
Loading...
@suneditor/suneditor-react is de officiële React-component. Alle editoropties worden ongewijzigd doorgegeven en de engine wordt alleen aan de clientzijde geladen, waardoor deze werkt in Next.js zonder next/dynamic.
Deze pagina bevat de README van het geïnstalleerde pakket, vertaald. De pagina's Playground en Getting Started geven code voor dezelfde versie.
De component heeft ook de SunEditor-engine nodig (peer dependency, 3.4.1 of later).
npm install suneditor @suneditor/suneditor-reactimport SunEditor from '@suneditor/suneditor-react';
import 'suneditor/css/editor';
import 'suneditor/css/contents';
export default function App() {
return (
<SunEditor
options={(se) => ({
plugins: [se.plugins.link, se.plugins.image, se.plugins.table],
buttonList: [
['undo', 'redo'],
['bold', 'italic', 'underline'],
['table', 'link', 'image'],
],
height: '400px',
})}
/>
);
}options wordt ongewijzigd aan suneditor.create() doorgegeven, waardoor elke optie, plug-in, knop, gebeurtenis en taal eigendom is van de engine zelf.
Deze README beschrijft alleen wat het React-component toevoegt; voor de opties zelf, zie het SunEditor documentatie- of het suneditor-pakket.
options ontvangt de lui geladen module suneditor (se.plugins, se.langs, se.interfaces, ...).
Geef de voorkeur aan deze vorm in Next.js: het statisch importeren van suneditor in een clientcomponent verstoort de serverrendering omdat de engine window aanraakt tijdens het importeren.
Een eenvoudig object werkt ook prima als je geen server-side rendering gebruikt, of voor opties die geen engine-import vereisen.
Taalpakketten zijn gewone objecten en kunnen altijd statisch worden geïmporteerd: import ko from 'suneditor/langs/ko'.
const [html, setHtml] = useState('<p>Hello</p>');
<SunEditor value={html} onChange={setHtml} options={...} />Als je value verandert in iets anders dan het laatste onChange-resultaat, wordt de editorinhoud vervangen.
Laat value weg voor een niet-gecontroleerde editor en lees de inhoud van de instantie wanneer je die nodig hebt.
const ref = useRef<SunEditorInstance | null>(null);
<SunEditor ref={ref} options={...} />
ref.current?.$.html.get();
ref.current?.$.html.set('<p>new</p>');
ref.current?.resetOptions({ height: '600px' });ref is het object dat door suneditor.create() wordt geretourneerd, waardoor de volledige engine-API beschikbaar is.
Geef handlers door via options.events. Ze worden bij elke rendering opnieuw gesynchroniseerd, zodat ze veilig kunnen worden afgesloten via de React-status.
<SunEditor
options={(se) => ({
plugins: [se.plugins.image],
events: {
onSave: async () => { await save(html); return true; },
onImageUploadBefore: ({ info, handler }) => { ... },
},
})}
/>Engine-opties die een DOM-element gebruiken, werken met refs omdat de options-functie na het mounten wordt uitgevoerd:
const toolbarRef = useRef<HTMLDivElement>(null);
<div ref={toolbarRef} />
<SunEditor options={(se) => ({ plugins: [se.plugins.link], toolbar_container: toolbarRef.current })} />Eén engine-instantie (werkbalk, plug-ins, gebeurtenissen, thema) met meerdere bewerkbare gebieden. Plaats een <SunEditorRoot> per gebied binnen een <SunEditorGroup>; andere JSX kan ertussen worden geplaatst. De groep rendert geen eigen elementen.
const toolbarRef = useRef<HTMLDivElement>(null);
<SunEditorGroup options={(se) => ({ plugins: [se.plugins.link], toolbar_container: toolbarRef.current })}>
<div ref={toolbarRef} />
<h2>Title</h2>
<SunEditorRoot name='header' value={header} onChange={setHeader} options={{ height: '80px' }} />
<SunEditorRoot name='body' value={body} onChange={setBody} readOnly={locked} />
</SunEditorGroup>;name is de motor rootKey (ref.current.changeFrameContext('body'), html.get({ rootKey: 'body' })).value / onChange, readOnly, disabled en frame options (height, placeholder, iframe, ...).toolbar_container nodig voor de gedeelde werkbalk, tenzij mode gelijk is aan inline of balloon.key van de groep om deze opnieuw aan te maken met andere roots.| Prop | Type | Beschrijving |
|---|---|---|
value | string | HTML-editor (gecontroleerd). |
onChange | (html: string) => void | Wordt aangeroepen bij elke inhoudswijziging. Afkorting voor options.events.onChange. |
options | SunEditorOptions | (se) => SunEditorOptions | SunEditor opties wordt ongewijzigd doorgegeven. events en theme worden live toegepast. Al het andere wordt eenmalig toegepast bij de aanmaak. |
readOnly | boolean | Schakel de alleen-lezenmodus in/uit. |
disabled | boolean | De editor uitschakelen. |
className, style | Toegepast op de verpakking <div>. | |
...divProps | HTMLAttributes<HTMLDivElement> | Elke andere prop (id, data-*, aria-*, ...) wordt toegepast op de omhullende <div>. children wordt genegeerd. |
ref | SunEditorInstance | null | De editor-instantie. |
Bij het aanmaken van de editor worden andere opties dan events en theme toegepast.
Om ze later te wijzigen, kunt u opnieuw mounten met een andere key of ref.current.resetOptions() aanroepen.
import type {
SunEditorProps,
SunEditorGroupProps,
SunEditorRootProps,
SunEditorInstance,
SunEditorOptions,
SunEditorFrameOptions,
SunEditorEvents,
} from '@suneditor/suneditor-react';Alle motortypes zijn ook verkrijgbaar vanaf suneditor/types.
"use client" staat in de buildoutput) en laadt de engine alleen in de browser, waardoor het direct vanuit een servercomponent kan worden weergegeven.suneditor in statische imports in clientcomponenten. Gebruik de options={(se) => ...}-vorm om se.plugins te bereiken.suneditor/css/editor, suneditor/css/contents, suneditor/src/themes/*.css) werken zowel in de App Router als in de Pages Router.