reactjs - React useMemo 或 useEffect 在 redux 状态更改时调用了太多次
问题描述
我正在一个新的 React 应用程序上尝试不同的模式,在这种情况下,我有一个包含项目对象数组的 redux 存储。当组件加载时,我分派一个新的操作来获取所有项目并使用新值设置存储,在这种情况下,列表会正确呈现。当我从同一个组件的子组件调度相同的操作时,redux 状态会更新,主组件会重新呈现,但列表保持不变。
export const ProjectList: React.FC = () => {
//When projects change the component should rerender with the new store
const { projects, isLoading, errors } = useSelector((store: IAppState) => store.projectState);
const dispatch = useDispatch();
const { setActiveProject } = useActiveProjectValue();
const { setIsNewTask } = useIsNewTaskValue();
useEffect(() => {
console.log('called');
dispatch(getProjectsAction());
}, []);
return (
<div className="ProjectList">
{!isLoading ? (
projects.map((project: IProject) => (
<ProjectListItem
key={project.docId ? project.projectId : uuid()}
handleClick={() => handleClick(project)}
project={project}
>
{project.name}
</ProjectListItem>
))
) : (
<p>Loading projects</p>
)}
{errors && <p>{errors}</p>}
</div>
);
};
我还尝试使用 useMemo 更改 useEffect 并向此函数添加项目依赖项,在这种情况下它可以工作,但它似乎触发了太多次操作:
useEffect(() => {
dispatch(getProjectsAction());
}, [projects]);
有什么建议/解决方案吗?谢谢!
解决方案
推荐阅读
- php - 如何检查 mysql 字段中是否有特定的“标签”?
- jquery - 如何延迟阴影
- unity3d - Time.timeScale 不工作统一
- javascript - 退出在循环中调用的回调函数
- asp.net-core - 正确设置 IdentityServer4 Cookie 用于登录,JWT 令牌用于 API 授权
- r - ggplot - 以点为单位控制线宽
- android - Android Firestore查询获取包含搜索值的文档的id
- matlab - 每个超像素上的 Gabor 滤波器
- python - 为简单的数字输入/输出正确的 Keras/TensorFlow 激活函数
- python - 从扩展 Python 的 C 调用 Python