javascript - 类型错误:对象预期 onClick
问题描述
将 onclick 函数作为菜单 component.js 中的道具从主组件代码传递时出错正在编译没有错误,但是当单击任何菜以获取从主组件传递 onclick 作为道具的详细信息时出现错误
codwe 在没有 onclick 函数的情况下工作得很好,没有将它作为 props 传递并直接从另一个组件而不是 main 调用它,但这会违反单一责任规则
浏览器错误
类型错误:对象预期
onClick
| function RenderMenuItem ({dish, onClick}) {
6 | return (
7 | <Card
> 8 | onClick={() => onClick(dish.id)}>
| ^
9 | <CardImg width="100%" src={dish.image} alt={dish.name} />
10 | <CardImgOverlay>
11 | <CardTitle>{dish.name}</CardTitle>
代码
主要组件.js
import React, { Component } from 'react';
import { Navbar, NavbarBrand } from 'reactstrap';
import Menu from './MenuComponent';
import DishDetail from './DishdetailComponent';
import { DISHES } from '../shared/dishes';
class Main extends Component {
constructor(props) {
super(props);
this.state = {
dishes: DISHES,
selectedDish: null
};
}
onDishSelect(dishId) {
this.setState({ selectedDish: dishId});
}
render() {
return (
<div>
<Navbar dark color="primary">
<div className="container">
<NavbarBrand href="/">Ristorante Con Fusion</NavbarBrand>
</div>
</Navbar>
<Menu dishes={this.state.dishes} onClick={(dishId) =>{ this.onDishSelect(dishId)}} />
<DishDetail dish={this.state.dishes.filter((dish) => dish.id === this.state.selectedDish)[0]} />
</div>
);
}
}
export default Main;
菜单组件.js
import React from 'react';
import { Card, CardImg, CardImgOverlay,
CardTitle } from 'reactstrap';
function RenderMenuItem ({dish, onClick}) {
return (
<Card
onClick={() => onClick(dish.id)}>
<CardImg width="100%" src={dish.image} alt={dish.name} />
<CardImgOverlay>
<CardTitle>{dish.name}</CardTitle>
</CardImgOverlay>
</Card>
);
}
const Menu = (props) => {
const menu = props.dishes.map((dish) => {
return (
<div className="col-12 col-md-5 m-1" key={dish.id}>
<RenderMenuItem dish={dish} onClick={props.onClick} />
</div>
);
});
return (
<div className="container">
<div className="row">
{menu}
</div>
</div>
);
}
export default Menu;
解决方案
您没有将onClick
回调传递给Menu
inApp
class App extends Component {
constructor(props) {
super(props);
this.state = {
dishes: DISHES
};
}
render() {
return (
<div>
<Navbar dark color="primary">
<div className="container">
<NavbarBrand href="/">Ristorante Con Fusion</NavbarBrand>
</div>
</Navbar>
<Menu
dishes={this.state.dishes}
onClick={dishId => console.log("dishId", dishId)} // <-- pass onClick callback
/>
</div>
);
}
}
推荐阅读
- python - Python opencv检测具有交叉点的形状
- azure - 有没有办法通过策略阻止将用户添加到 Azure 资源?
- python - 为什么 nc 文件中的 lat 和 lon 维度会因组装两个 nc 文件而改变?
- java - Univocity Parser - 如何在解析的 bean 中获取行号
- ios - 使用安全的 UITextField 输入密码时,键盘显示延迟较长
- swift - 如何在 SwiftUI 中使用 Swift 手动倒带、停止和转发 Gif
- php - Woocommerce 弱密码复选框(店面子主题)
- python - 有人可以帮我解决关于我在 python 中对我的 API 的发布请求的错误吗?
- javascript - 更改对象数组中的键名 - JS
- neovim - 如何在 Vim 中创建类似 Sublime 的构建系统?