2015-11-02 16 views
70

Reactコンポーネントを記述しようとしています。 htmlヘッダータグ(h1、h2、h3、etc ...)の場合、ヘッダーの優先度は、小道具で定義した優先度に基づいて動的に変化します。jsxとReactの動的タグ名

ここで私は何をしようとします。

<h{this.props.priority}>Hello</h{this.props.priority}>

予想される出力:

<h1>Hello</h1>

これが機能していません。これを行う方法はありますか?

+0

可能性のある重複した[リアクト/ JSXダイナミックコンポーネント名](http://stackoverflow.com/questions/28842459/react-jsx-dynamic-component-names) –

答えて

140

(最初の文字が大文字で)その場で、単に変数にそれを置くことを行うには方法:あなたが動的な名前を使用したい場合は

const CustomTag = `h${this.props.priority}`; 

<CustomTag>Hello</CustomTag > 
+1

コメントをいただき、ありがとうございます。これは涼しく働いています –

+3

'React.createClass'よりはるかに簡単です、私はこの方法が好きです。ありがとう。 – Vadorequest

+0

@zerkms CustomTagに属性を追加する方法はありますか?ありがとう – Sabrina

6

完全性のために、あなたも直接呼び出すことができます代わりに用いJSXのReact.createElement

React.createElement(`h${this.props.priority}`, null, 'Hello') 

これは新しい変数またはコンポーネントを作成する必要がなくなり。 docsから

React.createElement(
    `h${this.props.priority}`, 
    { 
    foo: 'bar', 
    }, 
    'Hello' 
) 

:小道具で

作成し、指定されたタイプの新しいリアクト要素を返します。 type引数には、タグ名の文字列('div'または'span'など)またはReactコンポーネントタイプ(クラスまたは関数)のいずれかを指定できます。

JSXで書かれたコードは、React.createElement()に変換されます。通常、JSXを使用している場合は直接React.createElement()を呼び出しません。詳細は、React Without JSXを参照してください。

関連する問題