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的错误,导致组件渲染失败。
修复方案二选一:
- 移除点击功能(如果暂时不需要):
修改RenderMenuItem组件:
function RenderMenuItem ({dish}) { return ( <Card> <CardImg width="100%" src={dish.image} alt={dish.name} /> <CardImgOverlay> <CardTitle>{dish.name}</CardTitle> </CardImgOverlay> </Card> ); }
- 添加点击功能(如果需要):
首先在主组件中添加点击处理方法并传递给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
相关产品推荐
相关产品推荐

