Контент не сохранен при нажатии клавиши «Enter» - PullRequest
0 голосов
/ 16 апреля 2020

Я впервые возился с блоками Гутенберга и создал новый пользовательский блок, смоделированный по умолчанию блок абзаца , но столкнулся со странной проблемой: после написания чего-либо внутри блок, содержимое теряется, если пользователь нажимает клавишу ввода.

Подробно, создается еще один пустой пользовательский блок, но старый стирает его содержимое.

Если блок теряет фокус любым другим способом (щелкнув где-либо еще или даже нажатием клавиш со стрелками), содержимое вместо этого будет правильно сохранено.

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

Вот функция edit блока, обратите внимание это урезанная версия абзаца по умолчанию:

  edit: ({
    attributes,
    mergeBlocks,
    onReplace,
    setAttributes,
  }) => {
    const {
      content,
      placeholder,
    } = attributes;
    const ref = useRef();

    return (
      <>
        <RichText
          ref={ref}
          identifier="content"
          tagName="p"
          allowedFormats={[
            'core/bold',
          ]}
          value={content}
          onChange={(newContent) => setAttributes({ content: newContent })}
          onSplit={(value) => {
            if (!value) {
              return createBlock('wp5a/paragraph');
            }

            return createBlock('wp5a/paragraph', {
              ...attributes,
              content: value,
            });
          }}
          onMerge={mergeBlocks}
          onReplace={onReplace}
          onRemove={onReplace ? () => onReplace([]) : undefined}
          aria-label={
            content
              ? __('Paragraph block')
              : __(
                'Empty block; start writing or type forward slash to choose a block',
              )
          }
          placeholder={
            placeholder
            || __('Start writing or type / to choose a block')
          }
          __unstableEmbedURLOnPaste
          __unstableAllowPrefixTransformations
        />
      </>
    );
  },

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

Как правильно обрабатывать нажатие клавиши ввода, чтобы создать новый блок того же типа и сохранить старый (см .: поведение абзаца по умолчанию)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...