TypeError:react__WEBPACK_IMPORTED_MODULE_6 ___ default.a.useState不是一个函数

时间:2019-08-04 17:50:32

标签: javascript reactjs material-ui

下面,我提供了我的ReactJS代码的简化草图(基于material-ui)。该代码无法编译,因为可能我在错误的位置添加了function handleClickOpen()function handleClose()。 我该如何解决?

尤其是以下是错误消息:

  

TypeError:react__WEBPACK_IMPORTED_MODULE_6 ___ default.a.useState为   不是功能

import React, { Component, Fragment } from 'react';
import Slide from '@material-ui/core/Slide';


const Transition = React.forwardRef(function Transition(props, ref) {
  return <Slide direction="up" ref={ref} {...props} />;
});


class BottomControls extends Component {
    render() {

        const [open, setOpen] = React.useState(false);

        function handleClickOpen() {
          setOpen(true);
        }

        function handleClose() {
          setOpen(false);
        }

        return (
          <Fragment>
             # ...
          </Fragment>
        );
    }
}

export default BottomControls;

2 个答案:

答案 0 :(得分:1)

  1. 类似于useState的钩子仅用于功能组件

  2. 应该在渲染函数之外调用它们

  3. React和react-dom必须为16.8或更高版本

import React, { useState, Fragment } from 'react';
import Slide from '@material-ui/core/Slide';


const Transition = React.forwardRef(function Transition(props, ref) {
  return <Slide direction="up" ref={ref} {...props} />;
});


function BottomControls(props) {
  const [open, setOpen] = React.useState(false);
  function handleClickOpen() { setOpen(true); }
  function handleClose() { setOpen(false); }
  return (
    <Fragment>
      // whatever
    </Fragment>
  )
}

export default BottomControls;

答案 1 :(得分:0)

根据React文档,我们不能在基于类的组件内使用钩子,请参考以下网址 https://reactjs.org/docs/hooks-faq.html