【问题标题】:Rendering an array of components in ReactJS在 ReactJS 中渲染组件数组
【发布时间】:2020-03-19 21:27:39
【问题描述】:

我正在尝试使用不同的 jsx 组件构建这个数组。我有一个函数,我将组件添加到这个数组然后返回它。

let components = [];
switch (obj.type) {
case 'title':
      components.push = (
          <>
            <Grid item xs={12} md={8}>
              <h1>{obj.value}</h1>
            </Grid>
          </>
        );
        break;
  case 'subtitle':
        components.push = (
          <>
            <Grid item xs={12} md={8}>
              <h3>{obj.value}</h3>
            </Grid>
          </>
        );
        break;
 }

return components;

当我尝试渲染它时,它呈现为空白。我想知道我做错了什么,或者实现这一目标的正确方法是什么。

const ComponentRender = ({ components }) => (
    <div>
      {components.map((component, i) => (
        <div key={i}>{component}</div>
      ))}
    </div>
  );

return <ComponentRender components={components} />;

【问题讨论】:

    标签: javascript reactjs material-ui


    【解决方案1】:

    您正在分配推送而不是使用该功能

    components.push(item)代替components.push = item

    【讨论】:

    • 觉得自己很蠢,谢谢你的注意!!你救了我!
    • @comsci_dude 哈哈,别担心,我们都有这样的时刻!
    【解决方案2】:

    我认为这就是你想要做的:

    const Component = ({ obj }) => {
      if (obj.type === 'title') {
        return <h1>{obj.value}</h1>;
      }
      if (obj.type === 'subtitle') {
        return <h3>{obj.value}</h3>;
      }
      return <h1>unkown</h1>;
    };
    const ComponentRender = ({ components }) => (
      <div>
        {components.map((component, i) => (
          <Component key={i} obj={component} />
        ))}
      </div>
    );
    
    
    //render ComponentRender
    ReactDOM.render(
      <ComponentRender
        components={[
          { type: 'title', value: 'title' },
          { type: 'subtitle', value: 'subtitle' },
        ]}
      />,
      document.getElementById('root')
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
    <div id="root"></div>

    【讨论】:

    • 感谢您的建议,但不,我正在尝试做类似的事情。我将在数组中填充多个组件。
    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2018-07-20
    • 2023-04-10
    • 1970-01-01
    • 2017-01-01
    • 2023-04-11
    • 2017-03-16
    • 2020-06-20
    相关资源
    最近更新 更多