Как решить ошибку Uncaught SyntaxError: Unexpected token?

Ссылка скопирована
1 ответ

Создаю новый кастомный блок списка для гутенберг и получаю ошибку: Uncaught SyntaxError: Unexpected token '<' (at custom-list.js.

Ниже код:

const { registerBlockType } = wp.blocks; const { InnerBlocks } = wp.blockEditor;  registerBlockType('custom-bullets-list/custom-block', {     title: 'Custom List',     icon: 'list-view',     category: 'text',     attributes: {         content: {             type: 'string',             default: '',         },     },     edit: function (props) {         const { attributes, setAttributes } = props;          const onContentChange = (newContent) =&gt; {             setAttributes({ content: newContent });         };          const contentArray = attributes.content.split('n');          const listItems = contentArray.map((item, index) =&gt; (             {                 name: 'core/paragraph',                 attributes: {                     content: item,                 },             }         ));          return (             &lt;ul className="custom-bullets-list"&gt;                 &lt;InnerBlocks                     template={listItems}                     templateLock="all"                 /&gt;             &lt;/ul&gt;         );     },     save: function () {         return (             &lt;ul className="custom-bullets-list"&gt;                 &lt;InnerBlocks.Content /&gt;             &lt;/ul&gt;         );     }, });

const { registerBlockType } = wp.blocks; const { InnerBlocks } = wp.blockEditor; registerBlockType('custom-bullets-list/custom-block', { title: 'Custom List', icon: 'list-view', category: 'text', attributes: { content: { type: 'string', default: '', }, }, edit: function (props) { const { attributes, setAttributes } = props; const onContentChange = (newContent) =&gt; { setAttributes({ content: newContent }); }; const contentArray = attributes.content.split('n'); const listItems = contentArray.map((item, index) =&gt; ( { name: 'core/paragraph', attributes: { content: item, }, } )); return ( &lt;ul className="custom-bullets-list"&gt; &lt;InnerBlocks template={listItems} templateLock="all" /&gt; &lt;/ul&gt; ); }, save: function () { return ( &lt;ul className="custom-bullets-list"&gt; &lt;InnerBlocks.Content /&gt; &lt;/ul&gt; ); }, });

Дополнительно:

Срока ошибки?

Попробуйте добавить компонентам закрывающий тег.

  • а оно компилируется чем-то или прямо так скармливается браузеру? браузер jsx не понимает
  • Ответы:

    Вот в такие ` ` знаки поставь HTML код. Например:

    return `&lt;b&gt;     пример &lt;/b&gt;`;

    return `&lt;b&gt; пример &lt;/b&gt;`;

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Ошибка Uncaught SyntaxError: Unexpected token '<' в вашем случае возникает потому, что браузеру отдали файл с JSX, а он понимает обычный JavaScript. Конструкция вида <ul>...</ul> внутри JS должна быть предварительно собрана Babel/webpack или написана через wp.element.createElement.

    Для Gutenberg-блока рабочий путь такой: держать исходник в src, собирать его через @wordpress/scripts, а в WordPress подключать уже файл из build.

    npm install --save-dev @wordpress/scripts
    npm run build

    npm install --save-dev @wordpress/scripts npm run build

    Пример package.json:

    {
      "scripts": {
        "build": "wp-scripts build",
        "start": "wp-scripts start"
      },
      "devDependencies": {
        "@wordpress/scripts": "^30.0.0"
      }
    }

    { "scripts": { "build": "wp-scripts build", "start": "wp-scripts start" }, "devDependencies": { "@wordpress/scripts": "^30.0.0" } }

    Ещё одна ошибка в коде: attributes.content.split('n') делит по букве n, а не по переносу строки. Если нужен перенос строки, используйте split('n'). Но для блока со списком лучше не хранить весь список одной строкой, а использовать InnerBlocks с разрешёнными дочерними блоками.

    Если не хотите сборку, перепишите JSX на wp.element.createElement, но для современных блоков это неудобно. Правильнее настроить сборку и подключать собранный JS через register_block_type или wp_enqueue_script.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно