回答:
それをその場で行う方法はありません。それを変数に入れます(最初の文字を大文字にします):
const CustomTag = `h${this.props.priority}`;
<CustomTag>Hello</CustomTag>
React.createClass
、私はこの方法を好みます。ありがとう。
<CustomTag foo="bar">
var foo = { bar: CustomTag }; return <foo.bar />
正常に動作します。
完全React.createElement
を期すために、動的な名前を使用したい場合は、JSXを使用する代わりに直接呼び出すこともできます。
React.createElement(`h${this.props.priority}`, null, 'Hello')
これにより、新しい変数またはコンポーネントを作成する必要がなくなります。
小道具を使って:
React.createElement(
`h${this.props.priority}`,
{
foo: 'bar',
},
'Hello'
)
ドキュメントから:
指定されたタイプの新しいReact要素を作成して返します。type引数は、タグ名文字列(
'div'
またはなど'span'
)、またはReactコンポーネントタイプ(クラスまたは関数)のいずれかです。JSXで記述されたコードは、使用するように変換されます
React.createElement()
。React.createElement()
JSXを使用している場合は、通常、直接呼び出すことはありません。詳細については、JSXを使用せずにReactを参照してください。
TypeScriptを使用している場合は、次のようなエラーが表示されます。
Type '{ children: string; }' has no properties in common with type 'IntrinsicAttributes'.ts(2559)
TypeScriptはそれCustomTag
が有効なHTMLタグ名であることを認識せず、役に立たないエラーをスローします。
修正するには、CustomTag
としてキャストしてkeyof JSX.IntrinsicElements
ください!
const CustomTag = `h${this.props.priority}` as keyof JSX.IntrinsicElements;
<CustomTag>Hello</CustomTag>
Types of property 'crossOrigin' are incompatible. Type 'string | undefined' is not assignable to type '"" | "anonymous" | "use-credentials" | undefined'. Type 'string' is not assignable to type '"" | "anonymous" | "use-credentials" | undefined'.
他のすべての答えは問題なく機能していますが、これを行うことで次のようにいくつか追加します。
見出しコンポーネント:
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>