You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在输入框输入内容后动态渲染对应的React组件

实现方案

1. 调整App.js逻辑

你可以通过「组件映射表」的方式匹配输入的星球名和对应组件,完整修改后的代码如下:

// 顶部导入依赖和所有星球组件
import { useState } from 'react';
import Earth from './components/snippets/Earth';
import Jupiter from './components/snippets/Jupiter';
import Mars from './components/snippets/Mars';
import Mercury from './components/snippets/Mercury';
import Saturn from './components/snippets/Saturn';
import Venus from './components/snippets/Venus';

// 建立星球名到组件的映射表
const PlanetComponentMap = {
  Earth,
  Jupiter,
  Mars,
  Mercury,
  Saturn,
  Venus
}

function App() {
  const [searchQuery, setSearchQuery] = useState("");
  // 新增状态存储需要渲染的组件列表
  const [renderPlanets, setRenderPlanets] = useState([]);

  const handleChange = (event) => {
    event.preventDefault();
    setSearchQuery(event.target.value);
  };

  // 新增Generate按钮点击处理逻辑
  const handleGenerate = () => {
    // 按逗号拆分输入内容,去除每个项的前后空格,过滤空值
    const inputPlanets = searchQuery.split(',')
      .map(name => name.trim())
      .filter(name => name.length > 0);
    // 匹配合法的星球组件,自动过滤输入的非法名称,同时去重
    const validComponents = [...new Set(inputPlanets)]
      .filter(name => PlanetComponentMap[name])
      .map(name => PlanetComponentMap[name]);
    setRenderPlanets(validComponents);
  }

  return (
    // 包一层根节点,满足React单根节点要求
    <div className="app-container">
      <div>
          <input
            id="inline-full-name"
            type="text"
            value={searchQuery}
            onChange={(e) => handleChange(e)}
            placeholder="输入逗号分隔的星球名,如 Mercury, Venus"
          />
      </div>
      <div>
        <div className="md:w-2/3">
          <button
            type="button"
            onClick={handleGenerate}
          >
            Generate
          </button>
        </div>
      </div>
      {/* 渲染匹配到的星球组件 */}
      <div className="planet-list">
        {renderPlanets.map((PlanetComponent, index) => (
          <PlanetComponent key={index} />
        ))}
      </div>
    </div>
  );
}

export default App

2. 可选优化

如果需要兼容大小写输入(比如用户输入mercury也能匹配到水星组件),可以把匹配逻辑修改为:

const validComponents = [...new Set(inputPlanets)]
  .map(name => name.charAt(0).toUpperCase() + name.slice(1).toLowerCase())
  .filter(name => PlanetComponentMap[name])
  .map(name => PlanetComponentMap[name]);

内容的提问来源于stack exchange,提问作者Nhan Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 11:12:03