我如何拥有一个按钮来触发要创建的新文本框? (反应)

How do I have a button that triggers a new text box to be created? (react)

我有第一个文本框和一个“+”按钮,我想单击它以在其下方创建一个新文本框。 需要继续在之前的下面制作文本框

这是我的文本框的代码:

import React, { Component } from "react";

class Textbox extends Component {
  state = { boxtext: "" };

handleChange = () => {
// The line below creates a copy of the state, using the spread operator
let fields = { ...this.state.boxtext };
fields = fields + "+";
this.setState({ fields });
};

render() {
return (
  <div
    style={{
      position: "absolute",
      left: "50%",
      top: "17%",
      transform: "translate(-50%, -50%)",
    }}
    className="form-group"
  >
    <label for="exampleLogicSymbol">Logic Operator</label>
    <input
      type="text"
      className="form-control"
      id="exampleInputLogic"
      aria-describedby="logicHelp"
      placeholder="enter formula"
      onChange={this.props.handleInput}
      value={this.props.content}
    ></input>
  </div>
 );
 }
}

export default Textbox;

我能想到的一个直接解决方案是维护一个数组的状态,其中元素的数量等于要在 UI 中显示的框,并通过映射数组来显示框。当然,还可以有其他最优解。

import React, { Component } from "react";

class Textbox extends Component {
  state = { 
      boxtext: "",
      addBox: []
    };

handleChange = () => {
    let fields = { ...this.state.boxtext };
    fields = fields + "+";
    this.setState({ fields });
};

//Handle box addition click
addTextBox = () => {
    const boxAdded = [...this.state.addBox]
    boxAdded.push(1)
    this.setState({
        addBox: boxAdded
    })
}

render() {
    return (
            <div
                style={{
                position: "absolute",
                left: "50%",
                top: "17%",
                transform: "translate(-50%, -50%)",
                }}
                className="form-group"
            >
                <label for="exampleLogicSymbol">Logic Operator</label>
                <input
                    type="text"
                    className="form-control"
                    id="exampleInputLogic"
                    aria-describedby="logicHelp"
                    placeholder="enter formula"
                    onChange={this.props.handleInput}
                    value={this.props.content}
                />
                <button onClick={this.addTextBox}>+</button>
                {
                    this.state.addBox.map(()=>{
                        return(
                            <input
                                type="text"
                                className="form-control"
                                id="exampleInputLogic"
                                aria-describedby="logicHelp"
                                placeholder="enter formula"
                            />
                        )  
                    })
                }
            </div>
        );
    }
}

export default Textbox;