javascript - 如何为 <pre> 或 <code> block 禁用 Prettier,以便保留新行(换行符)?

标签 javascript reactjs typescript prettier

// prettier.config.js
module.exports = {
  arrowParens: 'always',
  bracketSpacing: true,
  endOfLine: 'auto',
  printWidth: 180,
  semi: true,
  singleQuote: true,
  tabWidth: 2,
  trailingComma: 'all',
  useTabs: false,
};
function TaskList(): JSX.Element {
  // prettier-ignore-start
  return (
    <pre style={{ maxWidth: '300px', overflow: 'auto' }}>
     - A
     - B
     - C
     - D
    </pre>
  );
  //  prettier-ignore-end
}

但是在保存我的文件后,Prettier 删除了换行符,导致我的函数看起来像 - A - B - C - D

我也尝试按照 https://prettier.io/docs/en/ignore.html#jsx 上的建议使用 {/* prettier-ignore */>

我已经看过这些:

最佳答案

问题


问题是由于 JSX 折叠了它认为不需要的空格和换行符

这意味着这不是格式化或缩进特定文件的问题,也就是说,无论你使用哪个插件来格式化文件,问题都会一直存在,直到你告诉 JSX 这个 block 不应该像那样“缩小”到说。

引用:How to use whiteSpace: 'pre-wrap' on React

解决方案


dangerouslySetInnerHTML

dangerouslySetInnerHTML 是一个属性,您可以在 React 应用程序的 HTML 元素上使用它以编程方式设置它们的内容。您可以直接在元素上使用此属性,而不是使用选择器来获取 HTML 元素,然后设置其 innerHTML。

当使用 dangerouslySetInnerHTML 时,React 也知道该特定元素的内容是动态的,并且对于该节点的子节点,它只是跳过虚拟 DOM< 的比较/strong> 以获得一些额外的性能。

正如该属性的名称所暗示的那样,使用它可能很危险,因为它会使您的代码容易受到跨站点脚本 (XSS) 攻击。这会成为一个问题,尤其是当您从第三方来源获取数据或呈现用户提交的内容时。

Interpolation in JSX

对于新版本的 React/JSX,没有必要危险地使用 SetInnerHTML
您可以使用以下语法:

return (
   <>
     {`
       -A
       -B
     `}
   </>
)

代码


function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <pre style={{ maxWidth: '300px', overflow: 'auto' }}>
        {`
        - A
        - B
        - C
        - D
        `}
      </pre>
    </div>
  );
}

ReactDOM.createRoot(
    document.getElementById("root")
).render(
    <App/>
);
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<div id="root"></div> 

备注


如果这个答案不令人满意,或令人困惑,或没有回答问题,请发表评论,以便我进行编辑。

值得一提的是,我是用谷歌翻译来回答的,不便之处,敬请谅解

关于javascript - 如何为 <pre> 或 <code> block 禁用 Prettier,以便保留新行(换行符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74020543/

相关文章:

javascript - 如何在 reactjs 中的数组数据中排列数组?

javascript - React Router 只识别索引路由

reactjs - React Window 如何传入组件?

javascript - 制作图像面向运动方向html

javascript - JavaScript 对象构造函数的问题,其中参数是其他对象

ios - 如何为react-native native ui组件创建 typescript 类型定义?

angularjs - Angular + TypeScript : $watchCollection, "controller as"好的做法

javascript - 在所有类/接口(interface)/函数前面加上 App 首字母缩略词是个好习惯吗?

javascript - 我应该如何对有很多重叠的代码进行单元测试?

javascript - 在 iPad 上捕获 Click on DOM/HTML/BODY 事件