react块显示不必要的 br 标签

IT技术 javascript reactjs wordpress-gutenberg
2021-05-21 03:12:46

我正在构建代码段块以在<pre><code>标签内添加代码

但是,当查看代码时 -<pre>标签具有不必要的标签。

我的代码段块react代码

  edit({ attributes, setAttributes, isSelected }) {
    const { text } = attributes;

    return (
      <Fragment>        
            <RichText
              identifier="text"
              value={text}
              placeholder={__('Text')}
              onChange={nextText => {
                setAttributes({
                  text: nextText,
                });
              }}
            />
      </Fragment>
    );
  },

  save({ attributes }) {
    const { text } = attributes;

    return (
      <pre>
          {text && (<code>{text}</code> )}
      </pre>
    );
  },
};

从古腾堡编辑器插入的代码 - 用于测试。

Python program to illustrate destructor
class Employee:
Initializing
def __init__(self):
print('Employee created.')
Deleting (Calling destructor)
def __del__(self): print('Destructor called, Employee deleted.')
obj = Employee()
del obj

但是上面的测试片段被拉为: 片段 没有换行符和
标签的渲染片段块

该问题源于HTML 存储。存储过程中格式错误导致的问题。

mysql 中存储的片段。 存储片段

如何解决这个问题。这样代码就可以在<pre><code>带换行符内存储和查看<pre>标签中没有不必要的类

1个回答

默认情况下,React 会转义您的 HTML,以防止对您网站的跨站点脚本攻击 (XSS)。如果你想发布纯 HTML,你应该在你的 HTML 元素上使用危险的SetInnerHTML props,并将其innerHTML作为一个对象传递,其中键__html和值是你想要发布的 HTML。

危险地SetInnerHTML

risklySetInnerHTML 是 React 在浏览器 DOM 中使用 innerHTML 的替代品。一般来说,从代码中设置 HTML 是有风险的,因为很容易在不经意间将用户暴露给跨站点脚本 (XSS) 攻击。因此,您可以直接从 React 设置 HTML,但您必须输入危险的SetInnerHTML 并传递一个带有 __html 键的对象,以提醒自己这是危险的

因此,您可以将代码编写为:

<pre>
    {text && ( <code dangerouslySetInnerHTML={{ __html: text}} /> )}
</pre>

关于wp-block-example-snippet自动添加到<pre>元素中的类,您可以通过将其添加到 wordpress 中主题的 function.php 文件来删除它:

function wpassist_remove_block_library_css(){
    wp_dequeue_style( 'wp-block-library' );
} 
add_action( 'wp_enqueue_scripts', 'wpassist_remove_block_library_css' );

请注意,这将从您的网站中删除 Gutenberg 自动添加的 CSS 文件:

<link rel='stylesheet' id='wp-block-library-css'  href='https://nextseasontv.com/wp-includes/css/dist/block-library/style.min.css' type='text/css' media='all' />

Gutenberg 使用这些 CSS 库来管理站点前端的块。如果您不使用它们,您可以按照上述说明删除它们。