下面,我提供了我的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;
答案 0 :(得分:1)
类似于useState
的钩子仅用于功能组件
应该在渲染函数之外调用它们
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