【发布时间】:2023-03-03 17:25:01
【问题描述】:
我正在尝试实现一个响应式搜索栏来过滤纯组件列表(一次最多显示 100 个组件)。但是,在输入首字母和将其显示在搜索栏中以及其下方呈现的组件列表之间存在半秒的冻结。我相信是渲染组件的数量导致了这种延迟,因为将渲染数量限制在 ~20 使得响应几乎是即时的。
我有哪些选择可以最大限度地减少这种延迟并创建几乎即时的渲染?
我看过延迟加载,但我只能找到基于用户滚动动态加载的方法。有没有一种方法可以随着时间的推移拆分列表的呈现,因此不会出现长时间的停顿?
我还查看了React.memo,但延迟是当我从 0 -> 100 个组件开始时,因此在初始加载后缓存并没有真正帮助。有没有办法将这些组件预加载到缓存中?
const SearchPage = ({ dataMap }) => {
const [searchResults, setSearchResults] = useState([]);
const onInput = (e) => {
// near instant response when limit is ~20
setSearchResults(searchIndex.search(e.target.value, { limit: 100 }));
};
return (
<div>
<SearchBar onInput={onInput} />
<DataListTable
dataList={searchResults.map((dataId) => (dataMap[dataId]))}
/>
</div>
);
};
const DataListTable = ({ dataList }) => (
<table className="table">
<thead>
<tr>
<th>Inputs</th>
<th>Outputs</th>
<th>Requirement</th>
</tr>
</thead>
<tbody>
{dataList.map((data) => (
<DataRow data={data} key={data.dataId} />
))}
</tbody>
</table>
);
const DataRow = ({ data }) => {}
export default memo(DataRow);
【问题讨论】:
标签: javascript reactjs search next.js lazy-loading