[解決済み】React / JSXの動的なコンポーネントの名前
2022-04-02 23:24:23
質問
私は、コンポーネントをそのタイプに基づいて動的にレンダリングしようとしています。
例えば
var type = "Example";
var ComponentName = type + "Component";
return <ComponentName />;
// Returns <examplecomponent /> instead of <ExampleComponent />
ここで提案されている解決策を試してみました React/JSXの動的コンポーネント名
これはコンパイル時にエラーが発生しました(gulpのbrowserifyを使用)。配列構文を使っているところ、XMLを期待していたのです。
すべてのコンポーネントにメソッドを作成することで解決できました。
newExampleComponent() {
return <ExampleComponent />;
}
newComponent(type) {
return this["new" + type + "Component"]();
}
しかし、それでは私が作るコンポーネントごとに新しいメソッドを作ることになります。この問題にはもっとエレガントな解決策があるはずです。
提案には大いに期待しています。
どのように解決するのですか?
<MyComponent />
は、以下のようにコンパイルされます。
React.createElement(MyComponent, {})
これは、最初のパラメータとして文字列 (HTML タグ) または関数 (ReactClass) を期待します。
コンポーネントクラスを大文字で始まる名前の変数に格納すればいいんです。例えば HTMLタグとReact Componentsの比較 .
var MyComponent = Components[type + "Component"];
return <MyComponent />;
は、次のようにコンパイルされます。
var MyComponent = Components[type + "Component"];
return React.createElement(MyComponent, {});
関連
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] React JSX: selecting "selected" on selected <select> option
-
[解決済み] JSX.ElementとReactNodeとReactElementの使い分けは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない