Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么会出现错误:无效的钩子调用?_Javascript_Reactjs_React Hooks_React Props - Fatal编程技术网

Javascript 为什么会出现错误:无效的钩子调用?

Javascript 为什么会出现错误:无效的钩子调用?,javascript,reactjs,react-hooks,react-props,Javascript,Reactjs,React Hooks,React Props,我收到一个无法阅读的未定义道具。我正在尝试解构道具,但我需要钩子调用。我有没有办法在函数中解构道具,或者用其他方法来解决这个问题 ProductBrowse.jsx正在格式化产品: const ProductBrowse = () => { const { id, name, img, store, price, desc, inCart } = this.props.product; const [open, setOpen] = React.useState(

我收到一个无法阅读的未定义道具。我正在尝试解构道具,但我需要钩子调用。我有没有办法在函数中解构道具,或者用其他方法来解决这个问题

ProductBrowse.jsx正在格式化产品:

    const ProductBrowse = () => {

    const { id, name, img, store, price, desc, inCart } = this.props.product;
    const [open, setOpen] = React.useState(false);

    const openModal = () => {
      setOpen(!open);
    };

    const closeModal = () => {
      setOpen(!open);
    };

    return (
      <Box border={1} borderRadius={3}>
        <Card>
          <CardActionArea>
             <ProductModal
              open={open}
              onClick={() => openModal()}
              onClose={() => closeModal()}
              onSave={() => closeModal()}
              productName={name}
              productDesc={desc}
            />
            <CardHeader
              title={name}
              subheader={formatCurrency(price)}
            />
            <CardMedia
              image={img}
              alt={desc}
            />
            <CardContent>
              <Typography variant='body2' color='textSecondary' component='p'>
                {desc}
              </Typography>
            </CardContent>
          </CardActionArea>
          <CardActions>
            <Button size='small' /*To Checkout*/>BUY NOW</Button>
            <Button
              size='small'
              onClick={() => {
                console.log('Added to Cart');
              }}
            >
              ADD TO CART
            </Button>
            <Button size='small'>REVIEW</Button>
          </CardActions>
        </Card>
      </Box>
    );
  }
constproductbrowse=()=>{
const{id,name,img,store,price,desc,incontat}=this.props.product;
const[open,setOpen]=React.useState(false);
常量OpenModel=()=>{
setOpen(!open);
};
const closeModal=()=>{
setOpen(!open);
};
返回(
openModal()}
onClose={()=>closeModal()}
onSave={()=>closeModal()}
产品名称={name}
productDesc={desc}
/>
{desc}
立即购买
{
console.log('添加到购物车');
}}
>
添加到购物车
复习
);
}

您可以将基于类的组件转换为功能组件,如下所示:

const ProductBrowse = ({ product }) => {

   const { id, name, img, store, price, desc, inCart } = product;
   ...
}
export default ProductBrowse;
<ProductBrowse products={this.products} />
如您所见,产品道具正在被分解。如果您想提供更多道具并希望使用它们,那么整个道具对象都是可用的

i、 e


您正在尝试在基于类的组件中使用挂钩。请参阅

constproductbrowse=props=>{
const{id,name,img,store,price,desc,incontat}=props.product;
const[open,setOpen]=useState(false);
const classes=useStyles();
常量OpenModel=()=>{
setOpen(!open);
};
const closeModal=()=>{
setOpen(!open);
};
返回(
{openModal()}
onClose={()=>closeModal()}
onSave={()=>closeModal()}
产品名称={name}
productDesc={desc}
/> }
{desc}
立即购买
{
控制台日志(“添加到购物车”);
}}
>
添加到购物车
复习
);
};
此外,在使用此组件时,当您在ProductBrowse组件中分解结构时,将产品作为道具传递。应该是这样的:

const ProductBrowse = ({ product }) => {

   const { id, name, img, store, price, desc, inCart } = product;
   ...
}
export default ProductBrowse;
<ProductBrowse products={this.products} />


您使用挂钩的地方。钩子仅用于功能组件。确保你在功能组件中使用它。当我使用功能组件时,我得到一个错误:无法读取未定义的道具。如何在函数中解构道具?我写了前两行这样的代码,它似乎可以工作。这是分解功能组件的正确方法吗?const ProductBrowse=(props)=>{const{id,name,img,store,price,desc,incont}=props.product;@ocom:是的,它是正确的