首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法在单击回调中调用useContext?

是否有方法在单击回调中调用useContext?
EN

Stack Overflow用户
提问于 2022-04-11 05:15:22
回答 1查看 179关注 0票数 0

我正在学习React,并使用use方法访问自定义上下文:

代码语言:javascript
复制
// In a Provider file.
export const useUsefulObject(): UsefulObject {
  return useContext(...)
}

我希望在另一个文件中的单击回调中使用UsefulObject。为了方便起见,我将回调封装在一个方法someLogic中。

代码语言:javascript
复制
const PageComponent: React.FC = () => {
  return <Button onClick={(e) => someLogic(e)} />;
}

function someLogic(e: Event) { 
  const usefulObject = useUsefulObject();
  usefulObject.foo(e, ...); 
}

但是,VS代码警告说,在useUsefulObject中调用someLogic是违反钩子规则的,因为它是在组件方法之外调用的。

我可以向下传递对象(下面的代码工作!)但是,这感觉就像它违背了语境的意义,以避免所有的传承。还有比这更好的方法吗?

代码语言:javascript
复制
const PageComponent: React.FC = () => {
  const usefulObject = useUsefulObject();
  return <Button onClick={(e) => someLogic(e, usefulObject)} />;
}

function someLogic(e: Event, usefulObject) { 
  usefulObject.foo(e, ...); 
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-11 05:26:11

在组件呈现时需要调用钩子,所以最后一个想法是这样做的可能方法之一。另一个选项是您可以创建一个自定义钩子,它访问上下文并创建someLogic函数:

代码语言:javascript
复制
const PageComponent: React.FC = () => {
  const someLogic = useSomeLogic();
  return <Button onClick={(e) => someLogic(e)} />
}

function useSomeLogic() {
  const usefulObject = useUsefulObject();
  const someLogic = useCallback((e: Event) => {
    usefulObject.foo(e, ...);
  }, [usefulObject]);
  return someLogic;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71822966

复制
相关文章

相似问题

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