You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router v6升级后Menu组件不渲染问题求助

React Router v6升级后Menu组件无法渲染的解决方法

问题1:Route的element属性使用错误

React Router v6要求<Route>的element属性直接传入React元素,不能是返回元素的箭头函数。你当前的/menu路由写法会导致组件无法被正确渲染。

修复代码:
将主组件中/menu路由的element部分修改为:

<Route end path='/menu' element={<Menu dishes={this.state.dishes} />} />

问题2:RenderMenuItem的onClick props未定义

RenderMenuItem组件中调用了onClick(dish.id),但Menu组件在使用它时并未传递onClick属性,这会触发undefined is not a function的错误,导致组件渲染失败。

修复方案二选一:

  1. 移除点击功能(如果暂时不需要):
    修改RenderMenuItem组件:
function RenderMenuItem ({dish}) {
    return (
        <Card>
            <CardImg width="100%" src={dish.image} alt={dish.name} />
            <CardImgOverlay>
                <CardTitle>{dish.name}</CardTitle>
            </CardImgOverlay>
        </Card>
    );
}
  1. 添加点击功能(如果需要):
    首先在主组件中添加点击处理方法并传递给Menu:
class Main extends Component {
  constructor(props) {
    super(props);
    this.state = { dishes: DISHES };
    this.handleDishClick = this.handleDishClick.bind(this);
  }

  handleDishClick(dishId) {
    // 这里添加你的点击逻辑,比如跳转或显示详情
    console.log('选中的菜品ID:', dishId);
  }

  render() {
    return (
      <div>
        <Header />
        <Routes>
          <Route path='/home' element={<Home />} />
          <Route end path='/menu' element={<Menu dishes={this.state.dishes} onClick={this.handleDishClick} />} />
          <Route path='/' element={<Navigate replace to='/home' />} />
        </Routes>
        <Footer />
      </div>
    );
  }
}

然后在Menu组件中把onClick传递给RenderMenuItem:

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>
    );
}

完成以上修改后,Menu组件应该可以正常渲染了。

内容的提问来源于stack exchange,提问作者siilvhk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:01:28