Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flux 我应该在流量存储中进行过滤吗?_Flux - Fatal编程技术网

Flux 我应该在流量存储中进行过滤吗?

Flux 我应该在流量存储中进行过滤吗?,flux,Flux,这本质上是存储/视图中同步与异步操作的最佳实践问题 我正在尝试为项目列表构建一个实时搜索字段 在我当前的实现中,我从服务器请求所有项目,并将它们保存到一个存储中。当用户在搜索字段中输入字符时,视图使用.filter()本机函数过滤项目。不幸的是,这会导致下一次渲染(包括在搜索字段中显示的按键字符)之前的一些延迟(由于项目的数量和过滤器的复杂性) 我的问题是:我是否应该调用一个操作来初始化存储中项目的筛选,并在存储完成时更新?然后,在此期间,我将能够在过滤结果出现之前渲染按键字符 有没有一种直观的

这本质上是存储/视图中同步与异步操作的最佳实践问题

我正在尝试为项目列表构建一个实时搜索字段

在我当前的实现中,我从服务器请求所有项目,并将它们保存到一个存储中。当用户在搜索字段中输入字符时,视图使用.filter()本机函数过滤项目。不幸的是,这会导致下一次渲染(包括在搜索字段中显示的按键字符)之前的一些延迟(由于项目的数量和过滤器的复杂性)

我的问题是:我是否应该调用一个操作来初始化存储中项目的筛选,并在存储完成时更新?然后,在此期间,我将能够在过滤结果出现之前渲染按键字符

有没有一种直观的方法可以防止/中止以前的、不完整的请求,以便在收到新请求时进行筛选

编辑:

以下是新的实现:

组件/视图

\u onChange(){
这是我的国家({
items:ItemStore.getFilteredItems()
})
},
handleSearchChange(事件){
这是我的国家({
searchText:event.target.value,
})
ItemActions.filterItems(event.target.value)
},
render(){…}
行动

filterItems(搜索术语){
调度({
类型:筛选项目,
searchTerm:searchTerm,
});
}
商店

var\u存储={
项目:[],
filteredItems:[]
}
变量过滤器=函数(搜索项){…}
...
Dispatcher.register(功能(操作){
开关(动作类型){
案例过滤器项目:
过滤器(action.searchTerm)
ItemStore.emit(更改\u事件)
打破
}
})
编辑2:


最后,我在操作内进行调度时添加了一个setTimeout,以使其异步。我还将项目列表和搜索拆分为两个不同的组件,以便重新呈现列表所需的时间不会影响/阻止搜索字段组件。

筛选不应阻止搜索字段中的按键字符。基本上,因为过滤是一项繁重的操作,所以将其视为一个异步HTTP事件

以下是您在不断变化的世界中应该做的事情:

  • 从服务器检索所有项目并将其保存到存储
  • 每次键入搜索字段时,设置输入字段的状态,组件应立即重新渲染()
  • 在设置文本状态的同时,还要分派一个操作来过滤结果。筛选结果应作为单独的实体放入存储中,并根据此操作进行更新
  • 当存储更新过滤结果时,组件应将其作为
    道具
    ,并自动重新渲染(与按键事件无关)

完美。我同意这是更好的模式。请在编辑中查看我的代码。但是,我的代码仍然是同步的,因为action会立即分派searchTerm——我的第一次呈现(对于setState)发生在存储接收分派的action并处理过滤之后。有什么好主意吗?好办法是对服务器调用使用去盎司功能。就像lodash中提供的一样。