Skip to main content

Updating editor externally

Extract context as a ref

In order to access the context properties of your editor from an external component the following snippet should work.

It makes use of useImperativeHandle to attach the context from the editor to the ref within a forward ref component.

Here's the pure JavaScript version.

import React, { forwardRef, useImperativeHandle } from 'react';
import { ReactExtensions, ReactFrameworkOutput, Remirror, useRemirror } from '@remirror/react';

const extensions = () => [new BoldExtension()];

const EditorWithRef = forwardRef((_, ref) => {
const { manager, state, setState, getContext } = useRemirror({ extensions });

useImperativeHandle(ref, () => getContext(), [getContext]);

// Add the state and create an `onChange` handler for the state.
return (
<Remirror
manager={manager}
state={state}
onChange={(parameter) => {
// Update the state to the latest value.
setState(parameter.state);
}}
/>
);
});

EditorWithRef.displayName = 'EditorWithRef';

Here's the TypeScript version which, as a bonus should pass type checks.

import React, { forwardRef, useImperativeHandle } from 'react';
import { ReactExtensions, ReactFrameworkOutput, Remirror, useRemirror } from '@remirror/react';

const extensions = () => [new BoldExtension()];
type Extensions = ReactExtensions<BoldExtension>;

const EditorWithRef = forwardRef<ReactFrameworkOutput<Extensions>>((_, ref) => {
const { manager, state, setState, getContext } = useRemirror({ extensions });

useImperativeHandle(ref, () => getContext(), [getContext]);

// Add the state and create an `onChange` handler for the state.
return (
<Remirror
manager={manager}
state={state}
onChange={(parameter) => {
// Update the state to the latest value.
setState(parameter.state);
}}
/>
);
});

EditorWithRef.displayName = 'EditorWithRef';