阻止用户触发多次滚动

时间:2016-07-19 11:02:39

标签: reactjs scroll

我有一个HomePageContainers,它保存AJAX请求的数据并传递给HomePage组件。 HomePage组件由支持滚动的高阶函数InfiniteScroll组成。

InfiniteScroll看起来像这样:

componentDidMount() {
    window.addEventListener('scroll', this.onScroll.bind(this), false);
}

componentWillUnmount() {
    window.removeEventListener('scroll', this.onScroll.bind(this), false);
}

onScroll() {
    if ((window.innerHeight + window.scrollY) >= (document.body.offsetHeight - 200)) {
        const { scrollFunc } = this.props;
        scrollFunc();
    }
}

我希望代码在触发一个代码时阻止滚动并等待数据从请求到达。类似的东西:

 ((window.innerHeight + window.scrollY) >= (document.body.offsetHeight - 200)) + //a new condition to make sure only scroll happens when data arrives or fails. 

请注意,scrollFunc将从HomePageContainers收到,HomePageContainers将根据AJAX请求/响应更新其状态。

我可以将InfiniteScroll中的滚动状态存储为@Igorsvee,但我希望这些状态转到import os import json def _getjson(filename): """ returns a list of dictionaries """ if not os.path.exists(filename): return [] with open(filename, 'r') as openfileobject: data = json.loads(openfileobject.read()) return data def writefile(filename, data): """writes to file""" with open(filename, 'w') as f: for d in data: f.write(d['field1'] + ' ' + d['field2'] + ' ' + d['field3'] + '\n') ## a lot more code here def main(): filename = r'c:\input.json' data = _getjson(filename) outfile = r'c:\output.txt' writefile(outfile, data) if __name__ == '__main__': main() 组件,因为它负责处理滚动事件。

我将如何做?

1 个答案:

答案 0 :(得分:1)

假设HomePageContainers组件发出ajax请求,您可以向其状态添加一个新的isFetching标志,并将其与scrollFunc一起传递,以便您可以有条件地调用它: / p>

if(this.props.isFetching){
   scrollFunc();
}
请求开始时{p> isFetching应为truefalse以成功或错误结束时为scrollFunc。 或者你可以在if(this.state.isFetching){ ... } 本身内有条件逻辑:

substring_index()