Кнопка подчеркивания RichText в пользовательском блоке Gutenberg

Вопрос или проблема

Я работаю над кастомным блоком для Gutenberg, и часть этого блока — компонент RichText. Я пытаюсь добавить кнопку, которая подчеркивает текст, и не могу заставить это работать с прошлой ночи. У меня есть следующий код [который не работает]:

<div>
            <BlockControls
                controls={ [
                    {
                        icon: 'editor-underline',
                        title: __( 'Подчеркнуть' ),
                        onClick: () => {
                          console.log(this.test.current, this)
                            this.test.current.props.onChange(toggleFormat(
                              this.test.current.props.record,
                                { type: 'core/underline' }
                            ) );
                        },
                    },
                ] }
                />
              <RichText
                  tagName="p"
                  label="Введение"
                  className={ className }
                  multiline="br"
                  ref={this.test}
                  value={ content }
                  formattingControls={[]}
                  onChange={ ( content ) => { this.props.setAttributes( { content } ) } }
              />
            </div>

Можете помочь мне разобраться с этой проблемой?

В блоке, который я сейчас пытаюсь создать, я использую элемент управления RichText.

В нем есть кнопки/пункты меню для Жирного, Италик, Кода, Ссылки, Встраиваемого Изображения и Зачеркивания.

Хотя кнопки подчеркивания текста нет, я могу просто использовать сочетание клавиш [cmd+U], и это работает.

Это, похоже, работает и сохраняется как на фронтенде, так и на бэкенде.

Если это бы работало. Возможно, есть несколько причин, почему оно перестало работать. Есть ли у вас какие-либо ошибки в консоли?

Вы пробовали удалить блок и добавить его снова?

ИЗМЕНЕНИЕ: Я новичок в разработке блоков Gutenberg, так что я не знаю, что делать!

Вам может быть это полезно, если вы еще не натолкнулись на это.

Добавить кнопки форматирования к блокам Gutenberg core/paragraph BlockControls

Ответ или решение

Конечно! Давайте разберем, как добавить кнопку подчеркивания текста в ваш пользовательский блок Gutenberg с использованием компонента RichText. Проблема, с которой вы сталкиваетесь, может быть связана с неправильным использованием метода toggleFormat и отсутствием подключения нужных методов.

Вот полный пример кода, который должен помочь вам создать кнопку для подчеркивания текста:

import { registerBlockType } from '@wordpress/blocks';
import { RichText, BlockControls } from '@wordpress/block-editor';
import { Toolbar, IconButton } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { toggleFormat } from '@wordpress/rich-text';

const MyCustomBlock = ( { attributes, setAttributes } ) => {
    const { content } = attributes;

    const onChangeContent = ( newContent ) => {
        setAttributes( { content: newContent } );
    };

    const addUnderline = () => {
        // Получаем текущее состояние текста
        const newContent = toggleFormat( content, { type: 'core/underline' } );
        onChangeContent(newContent);
    };

    return (
        <div>
            <BlockControls>
                <Toolbar>
                    <IconButton
                        icon="editor-underline"
                        title={ __( 'Underline' ) }
                        onClick={ addUnderline }
                    />
                </Toolbar>
            </BlockControls>
            <RichText
                tagName="p"
                value={ content }
                onChange={ onChangeContent }
                placeholder={ __( 'Введите текст...' ) }
            />
        </div>
    );
};

registerBlockType( 'your-namespace/my-custom-block', {
    title: __( 'Мой пользовательский блок' ),
    icon: 'smiley',
    category: 'common',
    attributes: {
        content: {
            type: 'string',
            source: 'html',
            selector: 'p',
        },
    },
    edit: MyCustomBlock,
    save: ( { attributes } ) => {
        return <RichText.Content tagName="p" value={ attributes.content } />;
    },
} );

Объяснение кода:

  1. Импорты: Мы импортируем необходимые компоненты из библиотеки WordPress, включая registerBlockType, RichText, BlockControls, Toolbar, и IconButton.

  2. Состояние блока: В атрибутах используется content, которое будет хранить содержимое текста.

  3. onChangeContent: Эта функция обновляет состояние content при изменении текста.

  4. addUnderline: В этой функции используется toggleFormat, чтобы добавить или убрать формат подчеркивания из текста.

  5. BlockControls: Здесь мы добавляем кнопку для подчеркивания текста. При нажатии на кнопку вызывается addUnderline.

  6. Рендеринг: В основном рендере блока используется компонент RichText для редактирования текста.

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

Если у вас есть дополнительные вопросы или проблемы, не стесняйтесь задавать — я с радостью помогу!

Оцените материал
Добавить комментарий

Капча загружается...