Javascript 为什么会出现错误:无效的钩子调用?
我收到一个无法阅读的未定义道具。我正在尝试解构道具,但我需要钩子调用。我有没有办法在函数中解构道具,或者用其他方法来解决这个问题 ProductBrowse.jsx正在格式化产品: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(
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:是的,它是正确的