【发布时间】:2018-03-06 09:04:07
【问题描述】:
我有一个按钮,当按下它时应该可以切换列表中的更多项目。我在构造函数中设置了默认状态:
constructor(props) {
super(props)
this.state = {
showCount: 10,
expanded: false
}
}
因此列表中的默认项目数将为 10,并且不会扩展。然后我创建了一个应该改变状态并加载更多列表项的函数:
loadMore() {
const { showCount } = this.state
const { events } = this.props
showCount === 10
? this.setState({ showCount: events.reverse().length, expanded: true })
: this.setState({ showCount: 10, expanded: false })
}
并创建了一个“按钮”,如果expanded 状态为真或假,它应该更改其文本:
const toggleMore = (
<div className="text-center">
<a className="show-more" onClick={() => this.loadMore()}>
{this.state.expanded ? (
<span>Visa mindre</span>
) : (
<span>Visa mer</span>
)}
</a>
</div>
)
然后是使用.slice 和showCount 变量的列表项组件:
const mappedEvents =
events.length === 0 ? (
<p style={{ textAlign: 'center' }}>No events</p>
) : (
events
.reverse()
.slice(0, this.state.showCount)
.map((event, i) => {
return (
<div>
<EventItem
key={i}
...
/>
</div>
)
})
)
我的问题
所以这个按钮在我第一次使用时效果很好。如果我来到我的页面,我可以看到所有 10 个列表项,并且当按下按钮时,文本会发生变化。 但是当我第二次按下它时(expanded: true)我的所有列表项消失。当我第三次按下它时,我的列表项的顺序发生了变化,这意味着.revers() 显然不再起作用了。当我第四次按下它时,它又回到了第一阶段; 10 个清单项目和排序是应该的。在那之后它只是不断重复。
所以我只想知道我在这里做错了什么以及为什么按钮会这样。
感谢阅读!
【问题讨论】:
-
试试
onClick={this.loadMore.bind(this)} -
@ChrisG 感谢您的回复。没有运气尝试过:(
-
嗨,有几个问题:1)你能解释一下,你为什么要使用反向?我无法通过查看提供的代码来掌握它。 2) 你在哪里定义 toggleMore 和 mappedEvents 常量?
-
我构建了这个codesandbox.io/s/zxmjkr4l3x 似乎工作正常。
-
@GlebKost 是的,我正在使用 reverse() 因为我需要从我的 API 中获取最新的列表项。我在我的 render() 中定义了这两个常量。
标签: javascript reactjs