Reactjs,使用材质UI:无效的钩子调用错误

Posted

技术标签:

【中文标题】Reactjs,使用材质UI:无效的钩子调用错误【英文标题】:Reactjs, using material UI: Invalid hook call error 【发布时间】:2021-07-13 04:26:39 【问题描述】:

我对 React 很陌生,我尝试使用 Material UI 中的组件。我使用 npm install 将它本地安装到我的项目中,然后将我想要的组件导入到我的项目中。但是当我运行开始时,我得到: 错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一:

    您的 React 和渲染器版本可能不匹配(例如 React DOM) 您可能违反了 Hooks 规则 您可能在同一个应用程序中拥有多个 React 副本 有关如何调试和修复此问题的提示,请参阅 https://reactjs.org/link/invalid-hook-call。 ▶ 22 个堆栈帧被折叠。 模块。 src/index.js:7

我一直在研究,发现这是很多人都遇到的一个很常见的错误,但我尝试了所有提出的解决方案,但似乎都没有奏效。有人建议这可能会发生,因为我有很多 React 副本,在运行 npm ls react 后,我​​得到了这个: terminal screenshot。虽然我有很多react副本,但我查了一下deduped意味着de duplicated,所以我得出结论这不是问题的根源。 一旦我删除该组件,项目就会运行没有任何问题。如果有人能解决我的问题,我将不胜感激。

import React from 'react';
import Accordion from '@material-ui/core/Accordion';
import AccordionSummary from '@material-ui/core/AccordionSummary';
import AccordionDetails from '@material-ui/core/AccordionDetails';

Faq.js:

const Faq = (props) =>

        return (
            <Accordion>
                <Accordion>
                    <AccordionSummary
                    
                    aria-controls="panel1a-content"
                    id="panel1a-header"
                    >
                    <p>Pregunta1</p>
                    </AccordionSummary>
                    <AccordionDetails>
                    <p>HOLAA</p>
                    </AccordionDetails>
                </Accordion>
                <Accordion>
                    <AccordionSummary
                    
                    aria-controls="panel2a-content"
                    id="panel2a-header"
                    >
                    <p>Pregunta2</p>
                    </AccordionSummary>
                    <AccordionDetails>
                   <p>Holaaaa</p>
                    </AccordionDetails>
                </Accordion>
            </Accordion>
        )
    
    
    export default Faq;

MainCard.js:

    import React from 'react';
import Faq from './Faq'


const MainCard = () =>

    return(
        <div className="cardcontainer">
            <div className="nosotros">
                <div className="titulosnosotros">
                    <h1 className="titulo">Estudio sobre el diario <br />pionero de la transformación digital</h1>
                    <h2 className="subtitulo">¿Querés concoer más acerca de <br /> su reinvención?</h2>
                    <button className="download">¡Descargue aquí!</button>
                </div>
            </div>
            <div className="informacion">
                <ul className="informacionlist"> 
                    <li>
                        <img src="./images/cliente.png" />
                        <p className="informacion-texto">Cliente siempre en el centro</p>
                    </li>
                    <li>
                        <img src="./images/multiplataforma.png" />
                        <p className="informacion-texto">Más que un diario, una multiplataforma</p>
                    </li>
                    <li>
                        <img src="./images/barreras.png" />
                        <p className="informacion-texto">Atravesando barreras en la era digital</p>
                    </li>
                </ul>
            </div>
            <div className="transformacion">
                <h3 className="titulo-transformacion">Un diario que supo adaptarse</h3>
                <img className="fotodiario" src="./images/diario.jpg" />
                <h4 className="subtitulo-informacion">Desde 1869 hasta el presente digital</h4>
            </div>
            <div className="comentarios informacion">
            <h3 className="titulo-comentarios titulo-transformacion">Comentarios</h3>
            <ul className="informacionlist"> 
                    <li>
                        <img src="./images/icono.png" />
                        <p className="comentarios-texto">"¡Muy interesante!"</p>
                    </li>
                    <li>
                        <img src="./images/icono.png" />
                        <p className="comentarios-texto">"No puedo parar de leer"</p>
                    </li>
                    <li>
                        <img src="./images/icono.png" />
                        <p className="comentarios-texto">"Muchas cosas que no sabía"</p>
                    </li>
                    <li>
                        <img src="./images/icono.png" />
                        <p className="comentarios-texto">"¡Me encantó!"</p>
                    </li>
                </ul>
            </div>
            <Faq />
            
        </div>
    )


export default MainCard;

App.js:

import logo from './logo.svg';
import './App.css';
import MainCard from './components/MainCard';
import Contact from './components/Contact';
import Footer from './components/Footer';
import Header from './components/Header';



function App() 
  return (
    <div className="App">
      <Header />
      <MainCard />
      <Contact />
      <Footer />
    </div>
  );


export default App;

package.json:


  "name": "landingpage-lanacion",
  "version": "0.1.0",
  "private": true,
  "dependencies": 
    "@testing-library/jest-dom": "^5.11.10",
    "@testing-library/react": "^11.2.6",
    "@testing-library/user-event": "^12.8.3",
    "react-scripts": "^4.0.3",
    "web-vitals": "^1.1.1"
  ,
  
  "devDependencies": 
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "@material-ui/core": "^7.0.0"
,

  

  "scripts": 
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  ,
  "eslintConfig": 
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  ,
  "browserslist": 
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  

【问题讨论】:

为什么reactreact-dom@material-ui/core添加为devDependencies?顺便说一句,在撰写本文时,@material-ui/core 还没有 v7.0.0。 老实说,我不太确定。我看到一个有同样问题的人能够通过将三个放在开发依赖项中来改变它。你说得对,我看错了,所以我改了,谢谢! 你能分享一个最小的可重现CodeSandbox 例子吗? 我构建了代码箱示例并复制了所有文件,安装了所有依赖项。但是代码在沙箱中工作。而且我不明白为什么它在这里工作而不是在我原来的项目中。 【参考方案1】:

试试:

npm uninstall @material-ui/core
npm uninstall @material-ui/icons
npm uninstall @material-ui/lab

然后:

npm i @material-ui/core @material-ui/icons @material-ui/lab

【讨论】:

它没有用,但还是谢谢你的回答!我真的很感激

以上是关于Reactjs,使用材质UI:无效的钩子调用错误的主要内容,如果未能解决你的问题,请参考以下文章

Material UI 无效的钩子调用

在 React 中使用 material-ui makeStyles 的钩子调用无效

自关闭一个组件后出现无效的钩子调用错误

React + Antd + Rollup 组件库“错误:无效的钩子调用。钩子只能在函数组件的主体内部调用”

当我从样式组件中使用我自己的库时出现无效的钩子调用错误

Hooks 错误:在 Windows 上使用 NextJS 或 ReactJS 的 Hook Call 无效