我想用加载更多选项显示待办事项列表。我正在应用limit.Limit适用于list.But当我添加loadmore()函数。然后我得到错误 this.state.limit为null 我错了。任何人都可以建议我。
这是我的代码
 todoList.jsx
&#xA ;
 var TodoList = React.createClass({
 render:function(){
 var {todos} = this.props;
 var limit = 5 ;

函数onLoadMore(){
 this.setState({
 limit:this.state.limit + 5
});
}&#xA ; var renderTodos =()=> {
 return todos.slice(0,this.state.limit).map((todo)=> {
 return(
< Todo key = {todo.todo_id} {... todo} onToggle = {this.props.onToggle} />
);
});

};&# xA;
返回(
< div>
 {renderTodos()}
< a href =“#”onClick = {this.onLoadMore}>加载< / a&gt ;
< / div>
)
}
});
 module.exports = TodoList;

& #xA;
答案 0 :(得分:12)
<强>的变化:强>
1。首先使用limit
方法定义state
变量中的getInitialState
,您没有定义限制,这就是为什么{{1} }是this.state.limit
。
2。定义null
方法之外的所有functions
。
3。 render
不需要Arrow function
。
4。使用renderTodos
关键字调用this
方法,如下所示:
renderTodos
像这样写:
{this.renderTodos()}
答案 1 :(得分:0)
这是单击按钮。
众所周知,react组件具有函数componentDidMount()
,当该组件的模板呈现到DOM中时会自动调用该函数。而且我使用了相同的函数将事件监听器添加到div iScroll中。
元素的scrollTop
属性将找到滚动位置,并将其添加到clientHeight
属性中。
接下来,if条件将检查这两个属性的相加是否大于或等于滚动条的高度。如果条件为真,loadMoreItems
函数将运行。
class Layout extends React.Component {
constructor(props) {
super(props);
this.state = {
items: 10,
loadingState: false
};
}
componentDidMount() {
this.refs.iScroll.addEventListener("scroll", () => {
if (this.refs.iScroll.scrollTop + this.refs.iScroll.clientHeight >=this.refs.iScroll.scrollHeight){
this.loadMoreItems();
}
});
}
displayItems() {
var items = [];
for (var i = 0; i < this.state.items; i++) {
items.push(<li key={i}>Item {i}</li>);
}
return items;
}
loadMoreItems() {
this.setState({ loadingState: true });
setTimeout(() => {
this.setState({ items: this.state.items + 10, loadingState: false });
}, 3000);
}
render() {
return (
<div ref="iScroll" style={{ height: "200px", overflow: "auto" }}>
<ul>
{this.displayItems()}
</ul>
{this.state.loadingState ? <p className="loading"> loading More Items..</p> : ""}
</div>
);
}
}