我正在尝试创建一个简单的民意调查应用,您可以在其中进行新的民意调查。
在' MyPolls'部分中,我希望它只渲染我所做的前5次民意调查,而不是渲染整个民意调查列表。
在底部是“加载更多”'按钮,点击后,再加载5个民意调查,依此类推。
我一直在使用Mongoose / MongoDB后端,我的方法是使用skip
和limit
。
我已设法实现此功能,但问题是整个组件重新渲染,这对用户来说很烦人,因为您必须再次向下滚动点击“加载更多”'按钮。
这是我的应用:https://voting-app-drhectapus.herokuapp.com/
(为方便起见,请使用这些登录详细信息:
用户名:riverfish@gmail.com
密码:123
)
然后转到My Polls
页面。
MyPoll.js :
import React, { Component } from 'react';
import { connect } from 'react-redux';
import * as actions from '../../actions';
class MyPolls extends Component {
constructor(props) {
super(props);
this.state = {
skip: 0
};
}
componentDidMount() {
this.props.fetchMyPolls(this.state.skip);
this.setState({ skip: this.state.skip + 5 });
}
sumVotes(polls) {
return polls.reduce((a, b) => {
return a.votes + b.votes;
});
}
loadMore(skip) {
this.props.fetchMyPolls(skip);
const nextSkip = this.state.skip + 5;
this.setState({ skip: nextSkip });
}
renderPolls() {
return this.props.polls.map(poll => {
return (
<div className='card' key={poll._id}>
<div className='card-content'>
<span className='card-title'>{poll.title}</span>
<p>Votes: {this.sumVotes(poll.options)}</p>
</div>
</div>
)
})
}
render() {
console.log('polls', this.props.polls);
console.log('skip:', this.state.skip);
return (
<div>
<h2>My Polls</h2>
{this.renderPolls()}
<a href='#' onClick={() => this.loadMore(this.state.skip)}>Load More</a>
</div>
);
}
}
function mapStateToProps({ polls }) {
return { polls }
}
export default connect(mapStateToProps, actions)(MyPolls);
行动创作者:
export const fetchMyPolls = (skip) => async dispatch => {
const res = await axios.get(`/api/mypolls/${skip}`);
dispatch({ type: FETCH_MY_POLLS, payload: res.data });
}
投票路线:
app.get('/api/mypolls/:skip', requireLogin, (req, res) => {
console.log(req.params.skip);
Poll.find({ _user: req.user.id })
.sort({ dateCreated: -1 })
.skip(parseInt(req.params.skip))
.limit(5)
.then(polls => {
res.send(polls);
});
});
整个github回购:https://github.com/drhectapus/voting-app
我了解可能实施此功能的方法可能是最佳解决方案,因此我可以接受任何建议。
答案 0 :(得分:2)
看起来重新渲染是由于点击“加载更多”链接实际上导致反应路由器导航到新路由,导致整个Sub Export_Allcahrts_ppt()
Dim mypowerpoint As PowerPoint.Application
Dim mypowerpoint_pres As PowerPoint.Presentation
Dim myslide As PowerPoint.Slide
Dim mychart As ChartObject
Set mypowerpoint = New PowerPoint.Application
mypowerpoint.Visible = msoTrue
Set mypowerpoint_pres = mypowerpoint.Presentations.Add
Set myslide = mypowerpoint_pres.Slides.Add(1, ppLayoutBlank)
For Each mychart In Sheet1.ChartObjects
mychart.Copy
myslide.Shapes.PasteSpecial ppPasteBitmap
With myslide.Shapes(myslide.Shapes.Count)
.Top = 100
.Height = 200
.Left = 30
End With
Next
End Sub
组件重新渲染。
只需将MyPolls
替换为<a href='#' onClick={...}>
。
如果您不想使用<button onClick={...}>
,还可以将button
功能更改为
onClick