Reactコンポーネントを記述しようとしています。 html見出しタグ(h1、h2、h3など)の場合、見出しの優先順位は、小道具で定義した優先順位に基づいて動的に変化します。
ここで私がやろうとしていること。
<h{this.props.priority}>Hello</h{this.props.priority}>
期待される出力:
<h1>Hello</h1>
これは機能していません。これを行う可能な方法はありますか?
その場でそれを行う方法はありません。変数に入れるだけです( 最初の文字を大文字にした ):
const CustomTag = `h${this.props.priority}`;
<CustomTag>Hello</CustomTag>
完全を期すために、動的な名前を使用する場合は、JSXを使用する代わりに React.createElement
を直接呼び出すこともできます。
React.createElement(`h${this.props.priority}`, null, 'Hello')
これにより、新しい変数またはコンポーネントを作成する必要がなくなります。
小道具付き:
React.createElement(
`h${this.props.priority}`,
{
foo: 'bar',
},
'Hello'
)
docs から:
指定されたタイプの新しいReact要素を作成して返します。 type引数は、タグ名文字列(
'div'
や'span'
など)、またはReactコンポーネントタイプ(クラスまたは関数)のいずれかです。JSXで記述されたコードは、
React.createElement()
を使用するように変換されます。 JSXを使用している場合、通常はReact.createElement()
を直接呼び出しません。詳細については React Without JSX をご覧ください。
他のすべての答えはうまく機能していますが、これを行うことで余分なものを追加します:
見出しコンポーネント:
import React from 'react';
const elements = {
h1: 'h1',
h2: 'h2',
h3: 'h3',
h4: 'h4',
h5: 'h5',
h6: 'h6',
};
function Heading({ type, children, ...props }) {
return React.createElement(
elements[type] || elements.h1,
props,
children
);
}
Heading.defaultProps = {
type: 'h1',
};
export default Heading;
どのように使用できますか
<Heading type="h1">Some Heading</Heading>
または、異なる抽象概念を持つことができます。たとえば、次のようなサイズの小道具を定義できます。
import React from 'react';
const elements = {
xl: 'h1',
lg: 'h2',
rg: 'h3',
sm: 'h4',
xs: 'h5',
xxs: 'h6',
};
function Heading({ size, children }) {
return React.createElement(
elements[size] || elements.rg,
props,
children
);
}
Heading.defaultProps = {
size: 'rg',
};
export default Heading;
どのように使用できますか
<Heading size="sm">Some Heading</Heading>