簡體   English   中英

錯誤消息:未捕獲錯誤:無效掛鈎調用。 鈎子只能在 function 組件的內部調用

[英]Error Message: Uncaught Error: Invalid hook call. Hooks can only be called inside of the body of a function component

當我嘗試運行我的應用程序時出現空白頁,但沒有任何內容被渲染。

掛機調用無效。 鈎子只能在 function 組件的內部調用。 這可能由於以下原因之一而發生:

  1. 您可能有不匹配的 React 版本和渲染器(例如 React DOM)
  2. 你可能違反了 Hooks 規則
  3. 您可能在同一個應用程序中有多個 React 副本,請參閱https://reactjs.org/link/invalid-hook-call以獲取有關如何調試和修復此問題的提示。
import React,{ useState} from 'react';
import styled from 'styled-components'
import MenuIcon from '@material-ui/icons/Menu';
import CloseIcon  from '@material-ui/icons/Close';

function Header() {
    const [burgerState,setBurgerState] = useState(false);
    return (
    <Container>
        <a href='#'>
            <img src='/images/logo.svg' alt=''/>
        </a>
        <MenuGroup>
            <div>Model S</div>
            <div>Model X</div>
            <div>Model Y</div>
        </MenuGroup>
        <RightMenu>
            <a href='#'>Shop</a>
            <a href='#'>Tesla Account</a>
        <MenuIconContainer onClick={ () => setBurgerState(true)} >
            <MenuIcon/>
        </MenuIconContainer>
        </RightMenu>
        <BurgerNav status={burgerState}>
            <CloseContainer>
              <Close onClick={ () => setBurgerState(false)} />
            </CloseContainer>
            <li><a href='#'>Model S</a></li>
            <li><a href='#'>Model Y</a></li>
            <li><a href='#'>Existing inventory</a></li>
            <li><a href='#'>Used inventory</a></li>
            <li><a href='#'>Trade-in</a></li>
            <li><a href='#'>Cybertruck</a></li>
            <li><a href='#'>Roadster</a></li>
            <li><a href='#'>Semi</a></li>
            <li><a href='#'>Charging</a></li>
        </BurgerNav >
    </Container>
  )
}

export default Header;

const Container = styled.div`
display: flex;
min-height: 60px;
align-items: center;
justify-content: space-between;
padding: 0 20px;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 10;
`;


const MenuGroup = styled.div`
display: flex;
text-transform: uppercase;
div {
    font-weight: 600;
    padding: 0 10px;
    cursor: pointer;
}

@media(max-width: 760px) {
    display: none;
}
`;

const RightMenu = styled.div`
display: flex;
a {
    font-weight: 600;
    text-transform: uppercase;
    padding-right: 20px;
}
`;

const MenuIconContainer = styled.div`
display:flex;
align-iems:center;
cursor:pointer;
`;

const CloseContainer = styled.div`
display: flex;
justify-content: flex-end;
`

const Close = styled(CloseIcon)`
`;

const BurgerNav = styled.div`
position: fixed;
width: 300px;
background: white;
top: 0;
right: 0;
bottom: 0;
padding: 20px;
list-style: none;
transform: ${props => props.status ? 'translateX(0)' : 'translateX(100%)'};
transition: transform 0.2s ease-in;
li {
    padding: 15px 0;
    border-bottom: 1px solid rgba(0, 0, 0, .2);
    a {
        font-weight: 600;
    }
}
`

您的組件沒有無效的掛鈎調用。 您的代碼沒問題,(除了第 27 行不相關的未定義“關閉”。您是說 MUI 中的“CloseIcon”嗎?還有一個不相關的錯字“MenuIconContainer 中的 align-iems。

檢查其他組件,因為您在此處粘貼的代碼沒問題。 你在哪里調用無效的 Hook。 對於此錯誤,您可能只有 3 個原因會看到它:

  1. 使用不支持 Hooks 的 react-dom 版本
  2. 打破鈎子規則(比如在功能組件之外調用它,例如在 class 組件中,或者不在主體的頂層調用它)
  3. 擁有多個 React 副本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM