我如何处理 React JSX 中的长类名?

How can I deal with a long className in React JSX?

假设我在 React JSX 中渲染这个组件:

render() {
  return (
    <h1 className="col-xs-6 col-xs-offset-3 col-md-4 col-md-offset-4 col-lg-2 col-lg-offset-5">Some text</h1>
  );
}

类 触发我的 JS linter,因为一行太长,而且很难阅读。如何在不破坏 JSX 语法或在 JS linter 中触发不同错误的情况下,将 React 组件中的长 className 属性 分成多行? (我正在使用 ESLint)。

我通常只是将字符串包装成多行并将它们连接起来。 不要忘记在字符串的末尾或开头添加空格。

因此对于您的示例,它将是:

render() {
 return (
  <h1 className={
   'col-xs-6 ' +
   'col-xs-offset-3 ' +
   'col-md-4 ' +
   'col-md-offset-4 ' +
   'col-lg-2 ' +
   'col-lg-offset-5'}>Some text</h1>
 );
}

这样您也可以更轻松地扫描您设置的类名。

这里是一些最佳实践编码模式的 great resource,以及它们各自的 ESLint 或 JSCS 选项。

你也可以使用classNames:

classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''

也许你可以将你的一些 类 定义为变量,并重新使用它。

另一种 Cleaner 方法是将类名存储在一个数组中并连接它们。

render() { const classNames = ['col-xs-6', 'col-xs-offset-3', 'col-md-4', 'col-md-offset-4', 'col-lg-2', 'col-lg-offset-5'] return ( <h1 className={classNames.join(' ')}>Some text</h1> ); }

@Imamudin Naseem 解决方案,改进了一些代码风格

我建议改进代码风格,将类名直接保存为字符串

render() {
  const classNames = [
     'col-xs-6',
     'col-xs-offset-3',
     'col-md-4',
     'col-md-offset-4',
     'col-lg-2',
     'col-lg-offset-5'
  ].join(' ')

  return (
    <h1 className={classNames}>
      Some text
    </h1>
  );
}

我建议如果有一些逻辑(根据其他 values/props 决定)如何决定整个 classname 你应该使用 classNames npm 包。

但是,在您的情况下,您似乎已经知道 class 列表。在这种情况下,我倾向于使用 Javascript 模板文字,它允许将字符串拆分为多行。像这样:

render() {
    return (
        <h1 className={`col-xs-6 col-xs-offset-3 col-md-4 col-md-offset-4 
            col-lg-2 col-lg-offset-5`}
        >
            Some text
        </h1>
    );
}

您可以使用模板文字

<div
className={`"card-body align-self-center d-flex flex-column
flex-md-row justify-content-between min-width-zero align-items-md-center"`}
>

使用反斜杠

render() {
  return (
    <h1
      className="col-xs-6 col-xs-offset-3\
        col-md-4 col-md-offset-4 col-lg-2\
        col-lg-offset-5"
      >
        Some text
      </h1>
  );
}