首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React不调用Memoise函数

React不调用Memoise函数
EN

Stack Overflow用户
提问于 2020-09-28 22:55:53
回答 1查看 141关注 0票数 2

我有一个用来控制我的情态的功能:

代码语言:javascript
复制
const getModalProps = useCallback(
(id) => ({
  onClose: () => handleClose(id),
  onOpen: () => handleOpen(id),
  isOpen: isOpen(id),
}),
[handleClose, handleOpen, isOpen],
);

其想法是使用类似于<Modal {...getModalProps('userModal')} />的东西。当我想以下列方式使用它时,问题就出现了:

代码语言:javascript
复制
const modalProps = getModalProps('userModal');

useEffect(() => { modalProps.onOpen() }, [modalProps.onOpen])

这会导致无限循环,因为modalProps.onOpen实际上是一个匿名箭头函数,而不是useCallback回传函数。

对于如何使用getModalProps函数(返回回忆录,但没有调用handleOpenhandleClose的函数),我感到不知所措。

这样的想法(,我知道这是行不通的,只是一个概念):

代码语言:javascript
复制
const getModalProps = useCallback(
(id) => ({
  onClose: memoise(() => handleClose(id)),
  onOpen: memoise(() => handleOpen(id)),
  isOpen: isOpen(id),
}),
[handleClose, handleOpen, isOpen],
);

handleClosehandleOpen只是普通的useCallback函数。

如果需要更多信息,请留下评论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 23:20:01

创建一个创建回忆录onCloseonOpen的自定义钩子,并返回modalProps对象:

代码语言:javascript
复制
const useGetModalProps = id => { // you can also pass isOpen to the hook
  const onClose = useCallback(() => handleClose(id), [handleClose, id]);
  const onOpen = useCallback(() => handleOpen(id), [handleOpen, id]);

  return {
    onClose,
    onOpen,
    isOpen: isOpen(id),
  };
}

用法:

代码语言:javascript
复制
const modalProps = useGetModalProps('userModal');

useEffect(() => { modalProps.onOpen() }, [modalProps.onOpen])

代码语言:javascript
复制
<Modal {...modalProps } />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64110663

复制
相关文章

相似问题

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