使用回调函数来合并批处理redux操作(来自HOC),我应该在依赖数组中放入什么?

t1rydlwq  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(121)

我有这个组件

import React from 'react';
import { batch } from 'react-redux';  

const ContextMenu = ({
      menuData,
      isOpen,
      changeIsMenuOpen,
      changeAssetType,
    }) => {
      return (
        <ClickAwayListener
          onClickAway={() => {
            batch(() => {
              changeIsMenuOpen(false);
              changeAssetType(null);
            });
          }}
        >
          <ContextMenu
            open={isOpen}
            menuData={menuData}
          />
        </ClickAwayListener>
      );
    };

从HOC中获得支持

export default connect(
  state => ({
    isOpen: selectors.getIsMenuOpen(state),
    menuData: selectors.getMenuData(state),
  }),
  {
    changeIsMenuOpen: actions.changeIsMenuOpen,
    changeAssetType: actions.changeAssetType,
  },
)(ContextMenu);

我认为将onClickAway侦听器设置为useCallback可能是个好主意,这样它的示例就不会在每次呈现时都被重新创建。

const handleClickAway = useCallback(() => {
    batch(() => {
      changeIsMenuOpen(false);
      changeAssetType(null);
    });
  }, []);

但是我不确定我必须在依赖项数组中放入什么。它应该是我正在使用的所有方法吗?

[batch, changeIsMenuOpen, changeAssetType]
5anewei6

5anewei61#

只有当某个东西确实影响到应用程序性能时,才应该记住它。
话虽如此,要使用useCallback存储函数,需要传入函数中使用的所有外部项。
因此,[batch, changeIsMenuOpen, changeAssetType]是正确的相依性数组。
batch来自一个库。另外,changeIsMenuOpenchangeAssetType看起来是redux操作。所以,它们很可能是稳定的。但是,有一点需要注意,如果你使用了一些没有记忆的props对象/函数,那么你的记忆基本上是无用的,因为每次渲染时都会重新创建该函数。事实上,因为有额外的检查来维护记忆功能,所以如果没有记忆功能,应用程序的性能会稍好一些。
根据经验,如果重新渲染的成本很高,则只记忆一些内容。

相关问题