(这里反应新手)......
我正在使用Reactjs创建一个我有
的页面现在,“searchText”和“data”是我的状态,我试图弄清楚只有在从服务器收到数据后才更新“结果”。
每当用户将某些内容输入为搜索文本时,我就会处理一个事件
handleUserInput: function(searchText) {
this.loadDataFromServer(searchText);
this.setState({
searchText: searchText,
});
},
但是使用上述功能,会发生以下情况
结果立即更新为仅显示包含搜索文本的结果(下面的代码),但同时请求服务器获取结果,其中结果包含搜索文本< / p>
this.props.products.forEach(function(product){ if(product.name.toLowerCase()。indexOf(this.props.searchText)&gt; -1){ row = rows.push(行) } } .bind(本));
大约一秒钟后,从服务器收到新数据,结果再次刷新。
显然我想做的是
实现这一目标的正确方法是什么?
答案 0 :(得分:2)
不要认为searchText本身应该是一个州。您可以使用从服务器获取的数据来设置状态。
让我们说,data
是一个州财产。您可以将回调传递给loadDataFromServer,并且一旦在onsuccess
this.loadDataFromServer(searchText, function(data) {
this.setState({data: data}};
});
上获取数据,loadDataFromServer会调用此回调。
{{1}}
这样,一旦数据更新,组件将重新呈现并显示结果。
答案 1 :(得分:0)
那么,这只是你想要停止的第一次刷新吗?
如果结果来自服务器后它已经刷新了,那么您需要做的就是不在步骤3中过滤客户端上的结果 - 然后将生成相同的虚拟DOM,如第一步所示,所以结果列表只会在服务器响应后更新实际的DOM。