【问题标题】:Why does using imported functon cause invalid hook error?为什么使用导入的函数会导致无效的钩子错误?
【发布时间】:2019-06-26 17:18:07
【问题描述】:

我正在尝试构建一个导航栏作为仪表板页面的一部分。仪表板按预期运行,直到我尝试通过导入和调用该函数来包含导航栏。我知道包含函数调用时会出现错误,但不确定我做错了什么。

导航条码:

imports ...

export const NavItems = () => (
 <div>
    <ListItem button>
        <ListItemIcon>
            <DashboardIcon />
        </ListItemIcon>
        <ListItemText primary="Dashboard" />
    </ListItem>
    ...
 </div>
)

仪表板代码:

import React from 'react';
import List from '@material-ui/core/List'
import {NavItems} from './NavBar'

export default function App() {
return (
  <div class="grid-container">
     ...
     <aside class="sidenav">
       <List>
         <NavItems />
       </List>
     </aside>
     ...
  </div>
 );
}

我希望导航栏包含在站点的左侧面板中,但却收到以下错误:“无效的挂钩调用。挂钩只能在函数组件的主体内部调用。这可能发生在一个原因如下:..."

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    你忘了通过设置箭头函数让它成为一个函数组件。

    export const NavItems = () => (
      <div>
        <ListItem button>
          <ListItemIcon>
            <DashboardIcon />
          </ListItemIcon>
          <ListItemText primary="Dashboard" />
        </ListItem>
        ...
      </div>
    )
    

    或者使用函数声明:

    export function NavItems() {
      return (
        <div>
          <ListItem button>
            <ListItemIcon>
              <DashboardIcon />
            </ListItemIcon>
            <ListItemText primary="Dashboard" />
          </ListItem>
          ...
        </div>
      )
    }
    

    【讨论】:

    • 只是为了理解函数声明,它也可以这样工作吗? export const navItems = function() { ... }
    • 你写的是函数表达式。您应该将其拆分为:const navItems = function () { ... }; export { navItems };
    • @Dez 感谢您的快速回复。现在它呈现但列表没有出现。更新了问题并提供了更多解释。
    • 因为现在它是一个函数组件,所以你必须像这样渲染它:&lt;List&gt;&lt;NavItems /&gt;&lt;/List&gt;。对于 React 的良好实践,PascalCase 将 NavItems 的名称在声明中和在 Dashboard 代码中的导入中。
    • 谢谢,我进行了更改,但认为我在某处更新的语法仍然有点偏离,可能是在导出/导入过程中?
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2011-11-11
    相关资源
    最近更新 更多