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

React类组件转函数组件(React Hooks)后网页不更新问题求助

问题分析与修复

你的函数式组件存在两个关键错误,导致页面无法更新:

  1. dishes状态初始化错误
    原类组件中dishes直接赋值为DISHES数组,但转换后你写成了const [dishes] = useState({ DISHES });,这会让dishes变成一个包含DISHES属性的对象,而非原数组。后续filter操作会因对象无该方法或匹配失败,导致Dishdetail无法获取正确数据。

  2. selectedDish状态更新错误
    selectedDish是单一值类型(数字/ null),但你用对象展开的方式更新状态,导致selectedDish变成{ selectedDish: dishId }这样的对象。后续dish.id === selectedDish的比较永远不成立,页面自然不会更新。


修正后的函数式组件代码

import React, { useState } from "react";
import { Navbar, NavbarBrand } from "reactstrap";
import Menu from "./Menu";
import Dishdetail from "./Dishdetail";
import { DISHES } from "../shared/dishes";

function Main() {
    // 直接将DISHES数组作为初始值
    const [dishes] = useState(DISHES);
    // 保持selectedDish为单一值类型
    const [selectedDish, setSelectedDish] = useState(null);

    function onDishSelect(dishId) {
        // 直接更新为传入的dishId即可
        setSelectedDish(dishId);
    }

    return (
        <div>
            <Navbar dark color="primary">
                <NavbarBrand href="./" className="mx-5">
                    Ristorante De Confusion
                </NavbarBrand>
            </Navbar>
            <Menu dishes={dishes} onClick={(dishId) => onDishSelect(dishId)} />
            <Dishdetail dish={dishes.filter((dish) => dish.id === selectedDish)[0]} />
        </div>
    );
}

export default Main;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:56:09