Package Exports
- @lexical/react/ExtensionComponent
- @lexical/react/ExtensionComponent.js
- @lexical/react/LexicalAutoEmbedPlugin
- @lexical/react/LexicalAutoEmbedPlugin.js
- @lexical/react/LexicalAutoFocusPlugin
- @lexical/react/LexicalAutoFocusPlugin.js
- @lexical/react/LexicalAutoLinkPlugin
- @lexical/react/LexicalAutoLinkPlugin.js
- @lexical/react/LexicalBlockWithAlignableContents
- @lexical/react/LexicalBlockWithAlignableContents.js
- @lexical/react/LexicalCharacterLimitPlugin
- @lexical/react/LexicalCharacterLimitPlugin.js
- @lexical/react/LexicalCheckListPlugin
- @lexical/react/LexicalCheckListPlugin.js
- @lexical/react/LexicalClearEditorPlugin
- @lexical/react/LexicalClearEditorPlugin.js
- @lexical/react/LexicalClickableLinkPlugin
- @lexical/react/LexicalClickableLinkPlugin.js
- @lexical/react/LexicalCollaborationContext
- @lexical/react/LexicalCollaborationContext.js
- @lexical/react/LexicalCollaborationPlugin
- @lexical/react/LexicalCollaborationPlugin.js
- @lexical/react/LexicalComposer
- @lexical/react/LexicalComposer.js
- @lexical/react/LexicalComposerContext
- @lexical/react/LexicalComposerContext.js
- @lexical/react/LexicalContentEditable
- @lexical/react/LexicalContentEditable.js
- @lexical/react/LexicalContextMenuPlugin
- @lexical/react/LexicalContextMenuPlugin.js
- @lexical/react/LexicalDecoratorBlockNode
- @lexical/react/LexicalDecoratorBlockNode.js
- @lexical/react/LexicalDraggableBlockPlugin
- @lexical/react/LexicalDraggableBlockPlugin.js
- @lexical/react/LexicalEditorRefPlugin
- @lexical/react/LexicalEditorRefPlugin.js
- @lexical/react/LexicalErrorBoundary
- @lexical/react/LexicalErrorBoundary.js
- @lexical/react/LexicalExtensionComposer
- @lexical/react/LexicalExtensionComposer.js
- @lexical/react/LexicalHashtagPlugin
- @lexical/react/LexicalHashtagPlugin.js
- @lexical/react/LexicalHistoryPlugin
- @lexical/react/LexicalHistoryPlugin.js
- @lexical/react/LexicalHorizontalRuleNode
- @lexical/react/LexicalHorizontalRuleNode.js
- @lexical/react/LexicalHorizontalRulePlugin
- @lexical/react/LexicalHorizontalRulePlugin.js
- @lexical/react/LexicalLinkPlugin
- @lexical/react/LexicalLinkPlugin.js
- @lexical/react/LexicalListPlugin
- @lexical/react/LexicalListPlugin.js
- @lexical/react/LexicalMarkdownShortcutPlugin
- @lexical/react/LexicalMarkdownShortcutPlugin.js
- @lexical/react/LexicalNestedComposer
- @lexical/react/LexicalNestedComposer.js
- @lexical/react/LexicalNodeContextMenuPlugin
- @lexical/react/LexicalNodeContextMenuPlugin.js
- @lexical/react/LexicalNodeEventPlugin
- @lexical/react/LexicalNodeEventPlugin.js
- @lexical/react/LexicalNodeMenuPlugin
- @lexical/react/LexicalNodeMenuPlugin.js
- @lexical/react/LexicalOnChangePlugin
- @lexical/react/LexicalOnChangePlugin.js
- @lexical/react/LexicalPlainTextPlugin
- @lexical/react/LexicalPlainTextPlugin.js
- @lexical/react/LexicalRichTextPlugin
- @lexical/react/LexicalRichTextPlugin.js
- @lexical/react/LexicalSelectionAlwaysOnDisplay
- @lexical/react/LexicalSelectionAlwaysOnDisplay.js
- @lexical/react/LexicalTabIndentationPlugin
- @lexical/react/LexicalTabIndentationPlugin.js
- @lexical/react/LexicalTableOfContentsPlugin
- @lexical/react/LexicalTableOfContentsPlugin.js
- @lexical/react/LexicalTablePlugin
- @lexical/react/LexicalTablePlugin.js
- @lexical/react/LexicalTreeView
- @lexical/react/LexicalTreeView.js
- @lexical/react/LexicalTypeaheadMenuPlugin
- @lexical/react/LexicalTypeaheadMenuPlugin.js
- @lexical/react/ReactExtension
- @lexical/react/ReactExtension.js
- @lexical/react/ReactPluginHostExtension
- @lexical/react/ReactPluginHostExtension.js
- @lexical/react/ReactProviderExtension
- @lexical/react/ReactProviderExtension.js
- @lexical/react/TreeViewExtension
- @lexical/react/TreeViewExtension.js
- @lexical/react/useExtensionComponent
- @lexical/react/useExtensionComponent.js
- @lexical/react/useLexicalEditable
- @lexical/react/useLexicalEditable.js
- @lexical/react/useLexicalIsTextContentEmpty
- @lexical/react/useLexicalIsTextContentEmpty.js
- @lexical/react/useLexicalNodeSelection
- @lexical/react/useLexicalNodeSelection.js
- @lexical/react/useLexicalSubscription
- @lexical/react/useLexicalSubscription.js
- @lexical/react/useLexicalTextEntity
- @lexical/react/useLexicalTextEntity.js
Readme
@lexical/react
This package provides a set of components and hooks for Lexical that allow for text editing in React applications.
Getting started
Install lexical
and @lexical/react
:
npm install --save lexical @lexical/react
Below is an example of a basic plain text editor using lexical
and @lexical/react
(try it yourself).
import {$getRoot, $getSelection} from 'lexical';
import {useEffect} from 'react';
import {LexicalComposer} from '@lexical/react/LexicalComposer';
import {PlainTextPlugin} from '@lexical/react/LexicalPlainTextPlugin';
import {ContentEditable} from '@lexical/react/LexicalContentEditable';
import {HistoryPlugin} from '@lexical/react/LexicalHistoryPlugin';
import {OnChangePlugin} from '@lexical/react/LexicalOnChangePlugin';
import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext';
const theme = {
// Theme styling goes here
...
}
// When the editor changes, you can get notified via the
// LexicalOnChangePlugin!
function onChange(editorState) {
editorState.read(() => {
// Read the contents of the EditorState here.
const root = $getRoot();
const selection = $getSelection();
console.log(root, selection);
});
}
// Lexical React plugins are React components, which makes them
// highly composable. Furthermore, you can lazy load plugins if
// desired, so you don't pay the cost for plugins until you
// actually use them.
function MyCustomAutoFocusPlugin() {
const [editor] = useLexicalComposerContext();
useEffect(() => {
// Focus the editor when the effect fires!
editor.focus();
}, [editor]);
return null;
}
// Catch any errors that occur during Lexical updates and log them
// or throw them as needed. If you don't throw them, Lexical will
// try to recover gracefully without losing user data.
function onError(error) {
throw error;
}
function Editor() {
const initialConfig = {
namespace: 'MyEditor',
theme,
onError,
};
return (
<LexicalComposer initialConfig={initialConfig}>
<PlainTextPlugin
contentEditable={
<ContentEditable
aria-placeholder={'Enter some text...'}
placeholder={<div>Enter some text...</div>}
/>
}
/>
<OnChangePlugin onChange={onChange} />
<HistoryPlugin />
<MyCustomAutoFocusPlugin />
</LexicalComposer>
);
}