javascript - 与 Redux 反应,获取图像并将其设置为状态切片的一部分时性能损失很大
问题描述
我有一个 React 应用程序,状态由 Redux 管理。
用户可以搜索游戏,并且在提交时会出现标题与查询大致匹配的大量结果。每次用户输入另一个查询时,以前的结果都会被新的结果替换。
在 5-6 次搜索后,应用程序的速度会大大降低。在第 7 次搜索后,它完全停止工作,Chrome 抛出“页面无响应”通知。
redux 切片如下所示:
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import rawg from '../../apis/rawg';
const initialState = {
results: [],
};
export const fetchGames = createAsyncThunk(
'gamesSearch/fetchGames',
async (query) => {
const response = await rawg.get('/games', {
params: {
search: query,
},
});
return response.data.results;
}
);
const gamesSearchSlice = createSlice({
name: 'gamesSearch',
initialState,
reducers: {},
extraReducers: {
[fetchGames.fulfilled]: (state, action) => {
const results = action.payload;
const parsedResults = results.map((result) => {
return {
name: result.name,
slug: result.slug,
backgroundImage: result.background_image,
genres: result.genres.map((genre) => genre.name).join(', '),
id: result.id,
released: result.released
? `${result.released.split('-')[2]}.${
result.released.split('-')[1]
}.${result.released.split('-')[0]}`
: null,
};
});
},
},
});
export default gamesSearchSlice.reducer;
export const selectResults = (state) => state.gamesSearch.results;
从中分派 fetch 的组件如下所示:
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { fetchGames } from './gamesSearchSlice';
const SearchBar = () => {
const [query, setQuery] = useState('');
const dispatch = useDispatch();
const onSubmit = (e) => {
e.preventDefault();
if (!query) return;
dispatch(fetchGames(query));
};
return (
<div className="searchbar">
<form onSubmit={onSubmit}>
<input
className="searchbar__input"
type="text"
placeholder="Search for a game..."
value={query}
onChange={(e) => setQuery(e.target.value)}
/>
</form>
</div>
);
};
export default SearchBar;
我是否遗漏了一些关于 React 和 Redux 如何协同工作的细节,或者从基础的角度来看我的代码有什么问题(意思是:我没有使用 JavaScript 足够有效地处理数据)?
解决方案
推荐阅读
- python - scipy/optimize/slsqp.py c = concatenate((c_eq, c_ieq)) ValueError: 所有输入数组必须具有相同的维数
- php - FPDF:MULTICELL 生成报告
- perl - Perl 期望:对于 ssh 登录,如果一个错误的密码失败,如何尝试另一个密码?
- pandas - 用 scikitlearn 和 pandas 拟合 KDE 进行绘图。然而,分布在数据范围之外
- java - JSoup:难以提取单个元素
- typescript - Apollo 服务器中的打字稿语法
- mysql - 在 django 模型中存储时区假设?
- mongodb - mongodb:使用查找结果作为过滤的标准不适用于时间戳
- python - 如何在一条路线中调用多条路线?
- database - 创建新的BPMN proc时camunda数据库中存储了多少表数据