首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合Redux和useEffect钩子

问混合Redux和useEffect钩子
EN

Stack Overflow用户
提问于 2020-08-05 21:39:04
回答 1查看 425关注 0票数 0

我读到这在理论上是可以的。在我的小用例中,我遇到了一个问题,混合这些技术会导致双重重新渲染。

首先,当redux分派被执行时,一些组件通过useSelector使用属性。然后,在功能组件已经被重新呈现之后,将应用一个useEffect钩子来更新某些属性的状态。此更新将再次重新触发渲染。

例如,在我的例子中,下面的控制台日志打印了两次。

问:我是否应该删除useEffect和useState并将其集成到redux的存储中?

代码语言:javascript
复制
import {useSelector} from "react-redux";
import React from "react";


const Dashboard = (props) => {
    const selFilters = useSelector((state) => state.filter.selectedDashboardFilters);
    const [columns, setColumns] = React.useState([]);

    React.useEffect(() => {
            let newColumns = getColumns();
            setColumns(newColumns)
        }, [selFilters]
    )
    
    console.log("RENDER")
    
    return (
        <h1>{columns.length}</h1>
    )
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-07 02:44:16

如果每当selFilters发生变化时都需要重新计算columns,那么几乎可以肯定的是,您不应该在组件中重新计算它。如果状态是从selFilters计算出来的,那么您可能根本不需要将其存储为columns。相反,您可以使用reselect创建一个getColumns()选择器,该选择器在相关状态发生更改时从状态派生列。例如:

代码语言:javascript
复制
const getColumns = createSelector(
  state => state.filter.selectedDashboardFilters,
  selFilters => {
    // Compute `columns` here
    // ...
    return columns
  }
)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63266460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档