首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在反应元件之间共享钩子

如何在反应元件之间共享钩子
EN

Stack Overflow用户
提问于 2020-06-15 01:40:47
回答 1查看 127关注 0票数 2

我有一个高阶组件,它将通用功能添加到一组类似的组件中。为了便于讨论,我将把这个特殊的Wrapper和子CompACompB等命名为。

包装器是connect编辑的,并处理与Redux的交互以及API交互。它发送的数据属于包装的子程序,因此我通过支持将API/分派函数从包装器传递到子包中。现在,CompA、CompB等都有一个props.doStuff函数,该函数在包装器中只定义一次。

这是可以的,但是决定何时调用doStuff函数的事件是CompA、CompB等中本地状态的变化。因此,我要在两个子程序之间复制/粘贴相同的useEffect……

代码语言:javascript
运行
复制
function CompA(props) {
  const [data, setData] = useState({});
  useEffect( () => {
    if (props.doStuffNow === true) {
      props.doStuff(data);
    }
  }, [props.something]);
  return <div>CompA</div>
}

function CompB(props) {
  const [differentData, setDifferentData] = useState({});
  useEffect( () => {
    if (props.doStuffNow === true) {
      props.doStuff(differentData);
    }
  }, [props.something]);
  return <div>CompB</div>
}

这不是D.R.Y.,我真的很想把useEffect等移到包装类中,并允许CompA和CompB对该类进行extend

然而,反应documentation recommends composition over inheritance使用高阶组件。链接的文章甚至说他们从来没有遇到过继承比组合更好的情况。

那我错过了什么?有什么方法可以让我的代码变得干净利落吗?我可以通过道具传递useEffect吗?如果我只凭直觉:class CompA extends Wrapper.?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-15 01:56:34

创建一个名为useDoStuff的新钩子,它执行useEffect钩子,然后在需要的地方执行useDoStuff(props)

代码语言:javascript
运行
复制
function useDoStuff(props) {
  const [data, setData] = useState({}):
  useEffect(...)
}

function CompA (props) {
  useDoStuff(props);
  ...
}

function CompB (props) {
  useDoStuff(props);
  ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62380151

复制
相关文章

相似问题

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