Пользовательский блок с использованием blockRendererFn с DraftJS

Можно ли визуализировать пользовательский блок, где некоторые его части доступны для редактирования, а другие нет?

Вот пример того, чего я пытаюсь достичь. Компонент ReadOnlyComponent должен быть доступен только для чтения, а компонент WriteComponent содержит данные, которые можно редактировать.

class CustomBlock extends React.Component {
  props: Props;
  render() {
    return (
      <Layout>
        <LeftColumn>
          <ReadOnlyComponent>
            {this.props.block.getData().get('speaker')}
          </ReadOnlyComponent>
        </LeftColumn>
        <RightColumn>
          <WriteComponent>
            <EditorBlock {...this.props} />
          </WriteComponent>
        </RightColumn>
      </Layout>
    );
  }
}

Вот реквизит blockRendererFn, который мы передаем в редактор для создания пользовательских компонентов блока:

<Editor
  editorState={this.state.editorState}
  blockRendererFn={() => ({
    component: CustomBlock,
  })}
/>

1 ответ

Установка атрибута contenteditable="true" в WriteComponent должна делать то, что вы хотите.

class CustomBlock extends React.Component {
  ...
        <RightColumn>
          <WriteComponent contenteditable="true">
            <EditorBlock {...this.props} />
          </WriteComponent>
        </RightColumn>
      </Layout>
    );
  }
}

Также вы должны установить оставшийся элемент в contenteditable="false". Вы можете сделать это, установив атрибут "редактируемый" для вашего пользовательского блока в вашем рендерере.

<Editor
  editorState={this.state.editorState}
  blockRendererFn={() => ({
    component: CustomBlock,
    editable: false,
  })}
/>

Теперь ваш пользовательский блок должен отображаться как недоступный для редактирования, за исключением всего, что находится в WriteComponent.

Другие вопросы по тегам