javascript - 在回调中 react 自定义钩子(Hook)

标签 javascript reactjs react-hooks

我正在尝试在回调逻辑中使用我的自定义钩子(Hook),如下所示:

import React, { useEffect, useState } from 'react';
import useDataChange from '../../hooks/useDataChange';


const SomeComponent = () => {
  return (
    <Table
      handleTableChange={data => useDataChange(data)}
    />
  );
};


export default SomeComponent;

我的自定义钩子(Hook)(只是为了简化)看起来像这样:
const useDataChange = data => {
  console.log(data);
};

export default useDataChange;

简而言之,当表中的数据发生更改时(即当 Table 组件中的 handleTableChange 被触发时),应该触发自定义钩子(Hook)。相反,我得到:

React Hook "useDataChange" cannot be called inside a callback. React Hooks must be called in a React function component or a custom React Hook function react-hooks/rules-of-hooks



表数据更改时如何使用它?

最佳答案

理解 hooks 的关键是从组件中提取出一些 react 代码。所以你的第一步是让它在组件内部工作

const SomeComponent = () => {
  const [data, setData] = useState([])

  return (
    <Table
      handleTableChange={setData}
    />
  );
};

根据您的代码,我没有看到您需要 Hook 或副作用的地方。但是让我们假设您确实想要运行一些简单的副作用:
const SomeComponent = () => {
  const [data, setData] = useState([])
  const [modifiedData, setModifiedData] = useState([])

  useEffect(() => {
    //here we're just going to save the current data stream into a new state variable for simplicity
    setModifiedData(data)
  }, [data])

  return (
    <Table
      handleTableChange={setData}
      data={modifiedData}
    />
  );
};

所以现在我们有了一些产生副作用的逻辑。现在您可以将其提取到自己的钩子(Hook)中。
const useModifiedData = (data) => {
  const [modifiedData, setModifiedData] = useState(data)

  useEffect(() => {
    setModifiedData(data)
  }, [data])

  return modifiedData
}

const SomeComponent = () => {
  const [data, setData] = useState([])

  const modifiedData = useModifiedData(data)

  return (
    <Table
      handleTableChange={setData}
      data={modifiedData}
    />
  );
};

在这里,您有一个位于组件逻辑之外的钩子(Hook),因此它现在可以放入自己的文件中并在您的项目中使用。

关于javascript - 在回调中 react 自定义钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58821668/

相关文章:

javascript - 即使在 SUCCESS 之后,React 也会执行 PROMISE 的 CATCH 语句

reactjs - 如何访问缓存以使用 React Query 显示数据?

javascript - YouTube API onPlayerReady永远不会被调用

javascript - 如何高效使用jquery和javascript?

javascript - Angular cdkDropList 拖动元素限制

javascript - "Unexpected token, expected ,"当我尝试进行条件渲染以与无状态功能组件 react 时

reactjs - 覆盖高阶组件中的 prop 时的泛型推理

reactjs - React Hooks useCallback 依赖无限循环

javascript - React Hooks onchange 事件对于扫描仪输入来说太慢了

javascript - jquery排序复杂静态对象