Javascript 将钩子作为支撑物传递

Javascript 将钩子作为支撑物传递,javascript,reactjs,Javascript,Reactjs,将反应钩作为支柱传递到另一个部件是否可以接受/常见? 还是说它们只属于声明的组件? 以下只是一个示例,说明我将其作为 从父组件到子父组件的道具 import React, { useState } from 'react'; export const Parent = () => { const [count, setCount] = useState(0); return <div> Current count is {count} <Ch

将反应钩作为支柱传递到另一个部件是否可以接受/常见?
还是说它们只属于声明的组件?
以下只是一个示例,说明我将其作为
从父组件到子父组件的道具

import React, { useState } from 'react';

export const Parent = () => {

  const [count, setCount] = useState(0);

  return <div>
    Current count is {count}
    <Child setCount={setCount} /> // passing a hook set call as a prop to child
  </div>
}

const Child = ({setCount}) => {
  setCount(10) // using the hook set call
  return (
    <div>
      Some Child Text
    </div>
  );
};

export default Child;
import React,{useState}来自“React”;
导出常量父项=()=>{
const[count,setCount]=useState(0);
返回
当前计数为{count}
//将钩子组呼叫作为道具传递给孩子
}
const Child=({setCount})=>{
setCount(10)//使用hook set调用
返回(
一些子文本
);
};
导出默认子对象;

setCount
不是一个钩子,它只是另一个函数,所以您可以将其作为道具传递。您还可以考虑
useffect
useCallback
的输出,它们可以作为道具传递
useState
是一个钩子,
useCallback
是一个钩子,甚至对于封装其他钩子的任何函数来说,它们都不应该作为prop传递

为什么?

要回答这个问题,首先想一想你为什么要把钩子当作道具来传递?将钩子作为道具传递的好处是,您可以有条件地传递另一个钩子/跳过调用。
但是对于钩子,不应该有条件地调用它。所以没有意义。要将其作为道具传递,只需导入并使用它。

您的示例非常好,可以使用setCount只是一个函数。根据您的示例,状态属于父组件。但是,它的值将来自另一个组件API

如果将示例中的子组件更改为常规的
,也会发生同样的情况


我知道这个示例可能与您的实际案例实现不匹配。我只建议您注意子组件API是如何设计的,以使父组件不与子组件紧密耦合。

ya这是可能的。它像函数调用一样简单,这很好,实际上你应该这样做。事实上,它是一种模式,将
set
hook传递给子对象,以保持父对象中的所有状态,如果您没有使用像Redux这样的状态管理库,当setCount函数更改时,这将重新启动子项,但如果性能仍然良好,这是可以的。