javascript - 无效的钩子调用错误:只能在函数组件的主体内部调用钩子
问题描述
当我尝试向子组件添加挂钩以使函数可跨多个父组件重用时,我不断收到此Invalid hook call. Hooks can only be called inside of the body of a function component.
错误。
这个反应应用程序是通过create-react-app
通常的方式创建的。
我已经阅读了https://reactjs.org/warnings/invalid-hook-call-warning.html、https://github.com/facebook/react/issues/13991和其他 stackoverflow 答案,但没有找到一个解法。未捕获的错误:只能在函数组件的主体内部调用挂钩,但我使用的是有效版本。
我尝试输入npm ls react
以查看是否有两个版本正在运行,但只有一个版本显示:
-- react@16.8.6
//包.json
"react": "^16.8.6",
"react-dom": "^16.8.6",
// AdvancedSearch.jsx -- 子组件
export function HandleSearchFilterChange(props, e) {
const setAdvancedSearchFilter = useState( props.advancedSearchFilter )[1]; //error triggered here
useEffect(
setAdvancedSearchFilter(
e
)
);
}
// ETablesAndSearch.js -- 父组件
import { HandleSearchFilterChange} from '../Components/AdvancedSearch.jsx';
class ETablesAndSearch extends React.Component {
render() {
return(
<AdvancedSearch onSearchFilterChange={HandleSearchFilterChange}/>
)
}
错误消息: “无效的钩子调用。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一发生的:1.您的 React 和渲染器版本可能不匹配(例如 React DOM) 2. 您可能违反了 Hooks 规则 3. 您可能在同一个应用程序中拥有多个 React 副本”——在 AdvancedSearch.jsx 设置常量时。
解决方案
您可以简单地将ETablesAndSearch 类替换为功能组件。这将解决您的问题。
推荐阅读
- google-sheets - 如何在 =lookup 公式中使用单个单元格的集合而不是范围?
- google-bigquery - BigQuery 数据传输不完整
- lua - PlayerGui.MainGui.TwitterCodeFrame.Enter.LocalScript:14:预期的“结束”(在第 1 行关闭“功能”),得到
; (罗布洛克斯工作室) - php - 用于访问数组的 PHP 空安全运算符
- paypal - Paypal API/协议页面/隐藏收货地址块
- powerbi - Power BI - 使用多个按钮创建多个书签
- dump - 使用 marshmallow.fields 和性能转储用户数据
- postgresql - 在 postgresql 的原始文本列中使用多种日期格式转换列 to_date
- pdf - 自动将特定发件人的 pdf 附件(类型 application/pdf)保存到另一个 pdf 类型的附件(/A 或 /X pdf 类型
- android - React native mqtt - 按下按钮时发布