Reactで再利用可能なラッパーとして機能することのみを目的としてステートレスコンポーネントを作成しようとしています。完全にモジュール化されたCSSが必要なため、CSSモジュールも使用しています。
問題は、不要な要素を追加したくないということです(さらに、<div>
s)が、代わりにReactのフラグメントを使用したい。
今、私が抱えている問題は、フラグメント(少なくとも今のところ)classNamesを受け入れないことです。だから私がこれを試してみると:
// Wrapper.js内:
import React, { Fragment } from 'react'
import styles from './Wrapper.css'
const wrapper = (props) => (
<Fragment className={styles.wrapper}>
{props.children}
</Fragment>
)
export default wrapper
(たとえば)Navbar.jsの場合:
import React from 'react'
import styles from './Navbar.css'
import Wrapper from '../../Layout/Wrapper'
const navBar = (props) => (
<nav className={styles.navBar}>
<Wrapper>
This is the site's main navigation bar.
</Wrapper>
</nav>
)
export default navBar
もちろん、Fragmentの代わりにdivを使用することもできますが、不必要なマークアップを使用しないようにする他の回避策はありますか? :)
洞察、推奨、修正、またはその他の形式のヘルプを事前に感謝します!
フラグメントを使用すると、DOMに余分なノードを追加することなく、子のリストをグループ化できます。 - https://reactjs.org/docs/fragments.html
Fragmentsが不必要なdom要素を解決しようとするものですが、これはFragmentsがdiv
を完全に置き換えることを意味しません。そこにclassName
を追加する必要がある場合、この場合は別のdiv
のdom要素を追加するか、クラスをその親に追加することを明確にします。
Fragment
を使用すると、余分なノードをDOMに追加しません。
className
をノードに割り当てる場合は、div
を使用する必要があります。
Wrapper
/Fragment
が行う唯一のことは、nav
の子に対するCSSラッパーとして機能することです。
私はcss-modulesをあまり経験していませんが、classNameのためだけに余分なDOMノードを避けたい場合は、次のようなものを使用して両方のclassNamesを<nav>
に適用します。
import React from 'react'
import navStyles from './Navbar.css'
import wrapperStyles from './Wrapper.css'
const navBar = (props) => (
<nav className={`${navStyles.navBar} ${wrapperStyles.wrapper}`}>
This is the site's main navigation bar.
</nav>
)
export default navBar