動的な名前のReactコンポーネントをレンダリングしようとしています。 JSXでは、変数名を大文字にする必要があることを理解しています。私は私の状態の上にマッピングし、コンポーネントを移入しようとすると、しかし、私は次のエラーを取得する:動的に作成されたReactコンポーネントは、大文字でもHTMLとしてレンダリングされます。
Warning: <TextBlock /> is using uppercase HTML. Always use lowercase HTML tags in React.
私はこれを理解し、総額は私はマップとタイプを使用していない場合は、子のTextBlockに動作しているようですメインクラスのレンダリングで直接出力することができます。
メインクラス:
import React from 'react';
import TextBlock from './Components/TextBlock';
class RenderView extends React.Component {
constructor() {
super();
this.state = {
blurbs: [
{
value: "Text value",
tag: "h2",
component: 'TextBlock'
},
{
value: "lorem stuff adnfsaldkfn asdfl lkjasdflkj asdlfk alskdjflaksdjf ",
tag: "p",
component: 'TextBlock'
}
]
}
}
render() {
const componentArray = this.state.blurbs.map((blurb, index) => {
const Tag = blurb.component;
return <Tag obj={blurb} key={index} />;
})
return componentArray;
}
}
子コンポーネントのTextBlock:
import React from 'react';
export default function TextBox(props) {
const Tag = props.obj.tag;
const Output = <Tag>{props.obj.value}</Tag>
return Output;
}
が反応クロムツールをチェック、それはhtml要素としてレンダリングされるように表示されます。これらの2つの宣言がjsx要素であることを認識するための反応を得るにはどうすればよいですか?
参照は直接動作しているようです。私はマップのソリューションは、ここで最高のおかげで動作すると思います!あなたはなぜそれが上記のコードを取ることができないか知っていますか? – Jim
私は文字列なので、反応はどのコンポーネント 'TextBlock'があるかを知る方法がありません。コンポーネントを登録する方法はないので、参照を介して何を意味するのかを正確に伝える必要があります。 –