简体   繁体   English

如何避免在反应中重复 JSX / HTML 代码?

[英]How to avoid repeating JSX / HTML code in react?

I am building the UI in react.js and want to improve my JSX /HTML code to be smaller.我正在 react.js 中构建 UI,并希望将我的 JSX/HTML 代码改进得更小。

At the moment my JSX code takes around 70 lines of code.目前我的 JSX 代码需要大约 70 行代码。

This is what I am building:这就是我正在构建的内容: 在此处输入图片说明

And my One of the problems is that in some sentences one or more words need to be bolder.而我的问题之一是,在某些句子中,一个或多个单词需要加粗。

I would like to solve that in a better way than the below implemented code.我想以比下面实现的代码更好的方式解决这个问题。

Please find below my code HTML / JSX:请在下面找到我的代码 HTML / JSX:

    <div className="search-help" ref={(node) => this.setWrapperRef(node)}>
        <div className="search-help-content">
          <div className="search-help-header">
            <p>Use Specific Keywords for smarter filtering - English only</p>
          </div>
          <div className="search-help-sections">
            <div className="search-help-left-content">
              <p className="search-help-section-title">Logical Operator</p>
              <ul className="search-help-list">
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">
                    AND
                    <span className="search-help-label-sub">
                      "TX Group" <b>AND</b> "Latest News"
                    </span>
                  </p>
                </li>
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">
                    NOT
                    <span className="search-help-label-sub">
                      "Pochettino" <b>NOT</b> "Mourinho"
                    </span>
                  </p>
                </li>
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">
                    OR
                    <span className="search-help-label-sub">
                      "Cristobal Huet" <b>OR</b> "Nico Hischier"
                    </span>
                  </p>
                </li>
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">
                    ( )
                    <span className="search-help-label-sub">
                      <b>(</b>"Jeff Bezos" <b>OR</b> "Bill Gates" <b>OR</b>
                      <b>(</b> "Jack Dorsey"<b>)</b> <b>AND</b> <b>(</b>"Climate Change"<b>)</b>
                    </span>
                  </p>
                </li>
              </ul>
            </div>
            <div className="search-help-right-content">
              <p className="search-help-section-title">Language</p>
              <ul className="search-help-list">
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">lang:de</p>
                </li>
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">lang:eng</p>
                </li>
                <li className="search-help-label-spacing">
                  <p className="search-help-label-main">lang:fr</p>
                </li>
              </ul>
            </div>
          </div>
        </div>
      </div>

Any advice or idea?有什么建议或想法吗?

It seems extracting your <li> into a component might be a good start.似乎将您的<li>提取到组件中可能是一个好的开始。 Build a component, say, MyListItem and extract all repeating code there.构建一个组件,比如MyListItem并在那里提取所有重复代码。 Actual unique text will be passed there through props.实际唯一的文本将通过道具传递到那里。

To pass different bits of text into different places you can use different props like so:要将不同的文本位传递到不同的地方,您可以使用不同的道具,如下所示:

<li className="search-help-label-spacing">
  <p className="search-help-label-main">
    {this.props.binaryOperator}
    <span className="search-help-label-sub">
      "{this.props.string1}" <b>{this.props.binaryOperator}</b> "{this.props.string2}"
    </span>
  </p>
</li>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM