tha*_*guy 82 javascript reactjs
我有一些叫做station的数据,它是一个包含对象的数组.
stations : [
{call:'station one',frequency:'000'},
{call:'station two',frequency:'001'}
]
Run Code Online (Sandbox Code Playgroud)
我想为每个数组位置渲染一个ui组件.到目前为止我可以写
var stationsArr = []
for (var i = 0; i < this.data.stations.length; i++) {
stationsArr.push(
<div className="station">
{this.data}
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
然后渲染
render(){
return (
{stationsArr}
)
}
Run Code Online (Sandbox Code Playgroud)
问题是我正在打印所有数据.我想要只显示一个键,{this.data.call}但不打印任何东西.
如何遍历此数据并为数组的每个位置返回一个新的UI元素?
Seb*_*ber 135
您可以将站列表映射到ReactElements.
使用React> = 16,可以从同一组件返回多个元素,而无需额外的html元素包装.从16.2开始,有一个新的语法<>来创建片段.如果这不起作用或IDE不支持,则可以<React.Fragment>改为使用.在16.0和16.2之间,您可以使用非常简单的polyfill作为碎片.
请尝试以下方法
// Modern syntax >= React 16.2.0
const Test = ({stations}) => (
<>
{stations.map(station => (
<div className="station" key={station.call}>{station.call}</div>
))}
</>
);
// Modern syntax < React 16.2.0
// You need to wrap in an extra element like div here
const Test = ({stations}) => (
<div>
{stations.map(station => (
<div className="station" key={station.call}>{station.call}</div>
))}
</div>
);
// old syntax
var Test = React.createClass({
render: function() {
var stationComponents = this.props.stations.map(function(station) {
return <div className="station" key={station.call}>{station.call}</div>;
});
return <div>{stationComponents}</div>;
}
});
var stations = [
{call:'station one',frequency:'000'},
{call:'station two',frequency:'001'}
];
ReactDOM.render(
<div>
<Test stations={stations} />
</div>,
document.getElementById('container')
);
Run Code Online (Sandbox Code Playgroud)
不要忘记key属性!
https://jsfiddle.net/69z2wepo/14377/
Tho*_*dez 40
对于像我这样的新手,我的答案可能会有点混乱.您可以map在组件渲染方法中使用.
render () {
return (
<div>
{stations.map(station => <div> {station} </div>)}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
this.data 可能包含所有数据,因此您需要执行以下操作:
var stations = [];
var stationData = this.data.stations;
for (var i = 0; i < stationData.length; i++) {
stations.push(
<div key={stationData[i].call} className="station">
Call: {stationData[i].call}, Freq: {stationData[i].frequency}
</div>
)
}
render() {
return (
<div className="stations">{stations}</div>
)
}
Run Code Online (Sandbox Code Playgroud)
或者map,如果您使用的是ES6,则可以使用和箭头功能:
const stations = this.data.stations.map(station =>
<div key={station.call} className="station">
Call: {station.call}, Freq: {station.frequency}
</div>
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
199200 次 |
| 最近记录: |