当前位置: 首页 > 知识库问答 >
问题:

前端 - react点击按钮优雅的添加组件?

伍光济
2023-05-10

我接到一个需求就是类似一个创建一个考试试卷,每次点击按钮,添加一个新的组件,这个组件可以是选择题,也可以是是非题,我现在想要实现这个按钮,因为这个生成试卷的功能比较复杂,所以我想要每一步代码都非常精简,优雅,目前看到以下代码可以实现功能,已经算是比较简练的了,但是还是发上来,看看大佬门有没有更好的实现思路,让代码更优雅。

import React from 'react';
import ReactDOM from 'react-dom';


class AppComponent extends React.Component {
  state = {
    numChildren: 0
  }
  
  render () {
    const children = [];
    
    for (var i = 0; i < this.state.numChildren; i += 1) {
      children.push(<ChildComponent key={i} number={i} />);
    };
    
    return (
      <ParentComponent addChild={this.onAddChild}>
        {children}
      </ParentComponent>
    );
  }
  
  onAddChild = () => {
    this.setState({
      numChildren: this.state.numChildren + 1
    });
  }
}

const ParentComponent = props => (
  <div className="card calculator">
    <p><a href="#" onClick={props.addChild}>Add Another Child Component</a></p>
    <div id="children-pane">
      {props.children}
    </div>
  </div>
);

const ChildComponent = props => <div>{"I am child " + props.number}</div>;


ReactDOM.render(<AppComponent/>, document.getElementById('root'));

共有1个答案

陈兴朝
2023-05-10

可以用map简化:

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

const AppComponent = () => {
  const [components, setComponents] = useState([]);

  const onAddChild = (componentType) => {
    setComponents([...components, componentType]);
  };

  return (
    <div>
      <button onClick={() => onAddChild('Choice')}>Add Choice Question</button>
      <button onClick={() => onAddChild('TrueFalse')}>Add True/False Question</button>
      {components.map((componentType, index) => {
        switch (componentType) {
          case 'Choice':
            return <ChoiceQuestion key={index} />;
          case 'TrueFalse':
            return <TrueFalseQuestion key={index} />;
          default:
            return null;
        }
      })}
    </div>
  );
};

const ChoiceQuestion = () => {
  return <div>Choice Question</div>;
};

const TrueFalseQuestion = () => {
  return <div>True/False Question</div>;
};

ReactDOM.render(<AppComponent />, document.getElementById('root'));
 类似资料:
  • 本文向大家介绍Android优雅地处理按钮重复点击的几种方法,包括了Android优雅地处理按钮重复点击的几种方法的使用技巧和注意事项,需要的朋友参考一下 App中,有很大一部分场景是点击按钮,向服务端提交数据,由于网络请求需要时间,用户很可能会多次点击,造成数据重复提交,造成各种莫名其妙的问题。 因此,防止按钮多次点击,是Android开发中一个很重要的技术手段。 以前的处理方式 网上查找到的,

  • 本文向大家介绍Android如何给按钮添加点击音效,包括了Android如何给按钮添加点击音效的使用技巧和注意事项,需要的朋友参考一下 有很多制作精良的APP都自带点击音效,那么如何简单的来实现这一效果,这里需要使用到的一个概念叫做SoundPool,这个类主要用于播放一些比较小的音频文件,因为比较方便,通常用在游戏里比较多。 代码 闲话不多说,我们现在需要做一个功能,就是点击某一按钮的时候同时播

  • 下面是.java文件中的代码

  • 本文向大家介绍layui实现点击按钮给table添加一行,包括了layui实现点击按钮给table添加一行的使用技巧和注意事项,需要的朋友参考一下 •问题描述:想实现点击按钮在表格添加一行的功能,但发现layuii并未集成该工具栏,因此,需要自己手动添加这个功能; •原先我写的table是这样实现的: 并不能实现添加的效果;后查询后发现,这样做是基于table是用静态的方式编写的,即: 而我用的是

  • 本文向大家介绍iview给radio按钮组件加点击事件的实例,包括了iview给radio按钮组件加点击事件的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: iview的单选按钮如果想要加点击事件,加在 RadioGroup 上和 Radio 上都不生效,这时,可以给组件外包裹一个标签,然后加事件,就完美解决了。 以上这篇iview给radio按钮组件加点击事件的实例就是小编分享给大家的

  • 父组件存储所有状态。 函数触发任何并更改状态 myChangeHandler(事件){this.setState({[event.target.name]:event.target.value}); 在改变单选按钮的值应该返回在"指南是"行这里是代码,让我知道如果我错过了什么