简体   繁体   English

如何在 reactjs 中单击按钮多次显示项目?

[英]How to display item multiple times on button click in reactjs?

As you can see I am displaying a checkbox along with its label on ta button click.如您所见,我在单击按钮时显示了一个复选框及其 label。 At this moment I am only able to display one checkbox at a time.目前我一次只能显示一个复选框。 Is there a way to make it so I can display multiple?有没有办法让它显示多个?

import React, {Component} from 'react';
import './App.css';

class TodoBody extends Component {

    state = {
        buttonPress: false,
        checked: false
    };

    render() {
        return (
            <div style={{marginTop:'70px'}}>
                <div className="todo__body" style={{margin:'auto'}}>
                    <h1 style={{textAlign:'center', textDecoration:'underline'}}>To-do's</h1>
                    <div className="input-group mb-3">
                        <input type="text" className="form-control" placeholder="New Task" id="task" />
                        <div className="input-group-append">
                            <a className="btn btn-danger" type="button" onClick={this.addTask}>Add</a>
                        </div>
                    </div>
                    {this.state.buttonPress? 
                        [
                            <div style={{float:'left', paddingLeft:'25px'}} className="checkbox-container">
                                <input class="form-check-input" type="checkbox" value="" id="defaultCheck1"/>
                                <label class="form-check-label" for="defaultCheck1">{document.getElementById('task').value}</label>
                            </div>
                        ]
                    : <span/>}
                </div>
            </div>
        );
    }

    addTask = () => {
        this.setState({buttonPress:true});
    }
}

export default TodoBody;

Firstly, make a seperate component for checkbox, in this case name it Checkbox .首先,为复选框制作一个单独的组件,在本例中将其命名为Checkbox You can try to create an empty array as initial state. Then just add to it for every button click.您可以尝试创建一个空数组作为初始 state。然后只需在每次单击按钮时添加到它。 Then map the array in your render method, call Checkbox component for each:然后 map 数组在你的 render 方法中,为每个调用 Checkbox 组件:

import React, { Component } from 'react';
import './App.css';

const Checkbox = () => {
  return (
    <div style={{ float: 'left', paddingLeft: '25px' }} className="checkbox-container">
      <input class="form-check-input" type="checkbox" value="" id="defaultCheck1" />
      <label class="form-check-label" for="defaultCheck1">{document.getElementById('task').value}</label>
    </div>
  );
}

class TodoBody extends Component {

  state = {
    tasks: [],
    checked: false
  };

  addTask = () => {
    const tasks = this.state.tasks;
    this.setState({ tasks: [ tasks.length, ...tasks ] });
  }

  render() {
    return (
      <div style={{ marginTop: '70px' }}>
        <div className="todo__body" style={{ margin: 'auto' }}>
          <h1 style={{ textAlign: 'center', textDecoration: 'underline' }}>To-do's</h1>
          <div className="input-group mb-3">
            <input type="text" className="form-control" placeholder="New Task" id="task" />
            <div className="input-group-append">
              <a className="btn btn-danger" type="button" onClick={() => this.addTask()}>Add</a>
            </div>
          </div>
          {!!this.state.tasks.length ?
            this.state.tasks.map((task, i) => <Checkbox key={i} />)
            : <span />}
        </div>
      </div>
    );
  }
}

export default TodoBody;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM