[英]Dynamic column creation in react js
I have the following data in my code: 我的代码中包含以下数据:
this.state.data = [
{"col0":"Service Port","col1":80,"col2":8080}
{"col0":"Service Name","col1":"--","col2":"--"}
]
render
function: render
功能:
............
............
<div className="row">
<div className="col-lg-12">
<CollapsiblePanel name="Services"
bsStyle="info"
open>
<BootstrapTable data={this.state.data}
striped
hover>
{/*{
for(var i = 0; i < this.state.data.length; i++) {
var col = 0;
for(var j = 0; j < this.state.data[i].length; j)
<TableHeaderColumn
className="tableHeader"
dataField={this.state.col++}
}
}*/}
<TableHeaderColumn
className="tableHeader"
dataField="col0"
isKey
width="40%"></TableHeaderColumn>
<TableHeaderColumn
className="tableHeader"
dataField="col1"
width="40%"></TableHeaderColumn>
<TableHeaderColumn
className="tableHeader"
dataField="col2"
width="40%"></TableHeaderColumn>
</BootstrapTable>
</CollapsiblePanel>
</div>
</div>
What i want to do is to dynamically create the TableHeaderColumn
s because there could be more or less col
keys in my data
array, such as col3
, col4
, etc. I tried to integrate a for-loop
inside render but it didn't do the work (im not sure how to do that in react). 我想要做的是动态创建
TableHeaderColumn
是因为可以有更多或更少的col
中我的钥匙data
阵列,如col3
, col4
,等我试图整合for-loop
中渲染,但它没有这样做工作(我不确定如何做出反应)。
Could anyone suggest how to do that dynamically? 谁能建议如何动态地做到这一点? Thanks!
谢谢!
Use Array.prototype.map
使用
Array.prototype.map
<BootstrapTable data={this.state.data}
striped
hover>
{
this.state.data.map((item) => {
return (
<TableHeaderColumn
className="tableHeader"
dataField={item.col0}
isKey
width="40%" />
);
}
}
</BootstrapTable>
First, you would have to store your dynamic columns somewhere, I'll assume these columns are coming from a parent component, so I will set them as default props. 首先,您必须将动态列存储在某个位置,我假设这些列来自父组件,因此我将其设置为默认道具。
class MyOwnComponent extends from React.Component{
static defaultProps = {
cols = [
{
className: "tableHeader",
dataField: "col0",
width: "40%"
},
{
className: "tableHeader",
dataField: "col1",
width: "40%"
},
{
className: "tableHeader",
dataField: "col2",
width: "40%"
}
]
}
render(){
return(
<div className="row">
<div className="col-lg-12">
<CollapsiblePanel name="Services"
bsStyle="info"
open>
<BootstrapTable data={this.state.data}
striped
hover>
{/*{
for(var i = 0; i < this.state.data.length; i++) {
var col = 0;
for(var j = 0; j < this.state.data[i].length; j)
<TableHeaderColumn
className="tableHeader"
dataField={this.state.col++}
}
}*/}
{
this.props.cols.map(function(item){
return (
<TableHeaderColumn className={item.className} dataField={item.dataField} width={item.width}/>
)}
)}
</BootstrapTable>
</CollapsiblePanel>
</div>
</div>
)
}
}
Regarding the key, React encourages you to have a unique ID for each instance of a component, sort of speak. 关于键,React鼓励您为每个组件实例拥有唯一的ID,这可以说是合理的。 If you don't have it you could work around it with an index when iterating using map function.
如果没有它,则可以在使用map函数进行迭代时使用索引来解决它。 Like this:
像这样:
this.props.cols.map(function(item, index){
return (
<TableHeaderColumn key={index} className={item.className} dataField={item.dataField} width={item.width}/>
)}
Please check documentation for more reference: 请检查文档以获取更多参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.