这是一种解决方案。JSB在这里 http://jsbin.com/wowaluwipu/1/edit?html,js,output
首先,将所有组件数据放入其state
.
this.state = {
cars: [
{ "name" : "Audi", "country" : "Germany"},
{ "name" : "BMW", "country" : "Germany" },
{ "name" : "Chevrolet", "country" : "USA" },
{ "name" : "Citroen", "country" : "France" },
{ "name" : "Hyundai", "country" : "South Korea" },
{ "name" : "Mercedes-Benz", "country" : "Germany" },
{ "name" : "Renault", "country" : "France" },
{ "name" : "Seat", "country" : "Spain" },
],
itemsToShow: 3,
expanded: false
}
this.showMore = this.showMore.bind(this);
让我们使用itemsToShow
了解未展开时要显示的项目数。我们可以使用一个expanded
变量根据用户的操作更改按钮文本。我们也有约束力showMore
到该组件,以便按钮知道单击时要调用哪个组件的方法。
在我们的渲染中,让我们改变一些东西,就像这样
<ul>
{this.state.cars.slice(0, this.state.itemsToShow).map((car, i) =>
<li key={i}>{car.name} - {car.country}</li>
)}
</ul>
我们将渲染从 0 到任意数量itemsToShow
我们有。然后我们可以根据需要更改按钮的文本expanded
像这样的价值
<a className="btn btn-primary" onClick={this.showMore}>
{this.state.expanded ? (
<span>Show less</span>
) : (
<span>Show more</span>
)}
</a>.
最后,我们来写一下showMore
实际改变值的方法itemsToShow
.
showMore() {
this.state.itemsToShow === 3 ? (
this.setState({ itemsToShow: this.state.cars.length, expanded: true })
) : (
this.setState({ itemsToShow: 3, expanded: false })
)
}