简体   繁体   English

每次单击反应时如何添加标签?

[英]How can I append a tab everytime I click in react?

I want to output one tab everytime I click on the + button. 我想每次单击+按钮时输出一个选项卡。 I got it to output one. 我得到它输出一个。 But now I am completely stumped. 但是现在我完全陷入了困境。 Here is My main component. 这是我的主要组成部分。

import React, { Component } from 'react';
import './App.css';
import InputTab from './components/tabs/InputTabs/InputTab';
import AddTab from './components/tabs/IncrementTabs/AddTab';

class App extends Component {

  state = {
    elementlist: ""
  }

  AddComponentHandler = event =>{

    this.setState(
      {elementlist: <InputTab/>}
    );
  }

  render() {
    return (
      <div>
        {this.state.elementlist}
        <AddTab AddComp = {this.AddComponentHandler.bind(this)}
        list = {this.state.elementlist}/>
      </div>
    );
  }
}

export default App;

here is the component button which I want to click to append the input. 这是我要单击以追加输入的组件按钮。

import React from 'react';
import './AddTab.css';

const AddTab = props => {

    return(
        <div onClick = {props.AddComp}
        className = "addTab">
            +
        </div>
    );
}

export default AddTab;

And for reference, here is my inputtab which I want to output everytime i click. 供参考,这是我的输入选项卡,我想在每次单击时输出。 i hope i am being clear enough. 我希望我足够清楚。 Thank you in advance for help. 预先感谢您的帮助。

import React from 'react';
import './InputTab.css';

const InputTab = props => {
    return(
            <div className = "tabContainer">
                <input className = "inputTabName"/>
                <div className = "weightBox">
                    <input className = "inputTabWeight"/>%
                </div>
            </div>
    );
}

export default InputTab;

The ideal way would be to store an array of data in state, and then map() over that array to render out multiple InputTabs : 理想的方法是在状态中存储数据数组,然后在该数组上进行map()渲染出多个InputTabs

 class App extends React.Component { state = { elementlist: [] } AddComponentHandler = event => { this.setState( prevState => ({ elementlist: prevState.elementlist.concat([Date.now()]) })); } render() { return ( <div> {this.state.elementlist.map( el => <InputTab /> )} <AddTab AddComp={this.AddComponentHandler} /> </div> ); } } const AddTab = props => { return( <div onClick = {props.AddComp} className = "addTab"> + </div> ); } const InputTab = props => { return( <div className = "tabContainer"> <input className = "inputTabName"/> <div className = "weightBox"> <input className = "inputTabWeight"/>% </div> </div> ); } ReactDOM.render(<App/>, document.getElementById('root')); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"></div> 

You can just keep a simple integer counter of tabs in App state and increase it when click on AddTab button. 您可以将一个简单的制表符整数计数器保持在App状态,并在单击AddTab按钮时将其增加。 Then you can just render one InputTab for each number from 0 to counter stored in state. 然后,您只需为每个数字(从0到状态存储的counter呈现一个InputTab

 class App extends React.Component { state = { elementsCounter: 0 } AddComponentHandler = event => { this.setState( prevState => ({ elementsCounter: prevState.elementsCounter + 1 })); } render() { return ( <div> {[...Array(this.state.elementsCounter).keys()].map( index => <InputTab key={index} /> )} <AddTab AddComp={this.AddComponentHandler} /> </div> ); } } const AddTab = props => { return( <div onClick = {props.AddComp} className = "addTab"> + </div> ); } const InputTab = props => { return( <div className = "tabContainer"> <input className = "inputTabName"/> <div className = "weightBox"> <input className = "inputTabWeight"/>% </div> </div> ); } ReactDOM.render(<App/>, document.getElementById('root')); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"></div> 

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

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