× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]

Posted

技术标签:

【中文标题】× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]【英文标题】:× Error: Invalid hook call. Hooks can only be called inside of the body of a function component.[ReactJS] 【发布时间】:2021-10-25 05:34:53 【问题描述】:

我正在尝试使用 ReactJS 构建应用程序,但收到此“错误:无效的钩子调用。只能在函数组件的主体内部调用钩子。这可能由于以下原因之一发生:

    您的 React 和渲染器版本可能不匹配(例如 React DOM) 您可能违反了 Hooks 规则 您可能在同一个应用中拥有多个 React 副本”

我尝试了 Google 的许多方法,但仍然无法正常工作,但仍然出现此错误。 请帮帮我!

代码

import React from 'react'
import  useHistory, useParams  from 'react-router-dom'

function ProductDetails() 
  const  id  = useParams()
  // const  setText  = props;
  console.log(id)
  
  return (
    <div>
      <h1>id</h1>
    </div>
  )


export default ProductDetails

App.js


import './App.css';
import 
  BrowserRouter,
  Switch,
  Route,
  Link
 from "react-router-dom";
import Header from './Components/Header';
import Homepage from './Components/HomePage';
import CartDetails from './Components/CartDetails';
import ProductDetails from './Components/ProductDetails';
import Error404 from './Components/Error404';
import  useState  from 'react';

function App() 
  const [text, setText] = useState(0);
 
  return (
    <>
      <BrowserRouter>
      <Header text=text/>
        <Switch>
          <Route exact path="/" component=Homepage />
          <Route exact path="/cart-details" component=()=> <CartDetails val=text /> />
          <Route exact path="/products-details/:id" component=ProductDetails />
          <Route
            exact
            path="/products-details/:id"
            component=() => <ProductDetails setText=setText />
          />
          
        </Switch>
      </BrowserRouter>

    </>
  );

export default App;

package.json

  "peerDependencies": 
    "react": ">=16.8.0",
    "react-dom": ">=16.8.0"
 ,
 "react-dom": "^17.0.2",

【问题讨论】:

你如何使用App 想使用useParams() 获取url参数ID。但不工作..请帮助我 没有。重新阅读我的问题。你如何使用App?你可能在做ReactDOM.render(App, ...) 这是错误的,你需要做ReactDOM.render(&lt;App /&gt;, ...) 【参考方案1】:

您应该在ProductDetails() 组件中放置一个名为props 的参数,然后只有您可以从父组件访问道具。 像这样放

function ProductDetails(props) 
   const  setText  = props;
   ....

现在您可以在ProductDetails 组件中使用setText 函数。

【讨论】:

先生,我不想要它..我想使用 useParams() 来获取 url 参数 ID。但就我而言,它不起作用

以上是关于× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]的主要内容,如果未能解决你的问题,请参考以下文章

× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]

React 17 - 添加 Evergreen UI 窗格会导致错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。 (React-hooks React-native)

无效的挂钩调用。 Hooks 只能在函数体内部调用 component-formik

useStaticQuery:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

无效的挂钩调用。钩子只能在使用 react-apollo 的函数组件内部调用