[英]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.