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

为什么依赖数组为空的useEffect在组件加载时未被调用?

useEffect未触发问题排查及修复方案

核心问题1:语法错误导致组件渲染失败

你提供的代码里存在一处JSX语法错误,会直接导致组件无法正常渲染,进而useEffect不会执行:
在Modal.Footer的三元判断中,isEdit == false后缺少三元运算符的?标识,修正后代码如下:

<Modal.Footer>
    {isEdit == false ?
        <>
            <Button variant="secondary" className="btn btnedit" onClick={handleClose}>Cancel</Button>
            <Button variant="primary" onClick={addUser}>Add User</Button>
        </>
        :
        <>
            <Button variant="primary" className="btn btnremove" onClick={removeUser}>Remove User</Button>
            <Button variant="primary" className="btn btnedit">Reset User</Button>
            <Button variant="primary" onClick={updateUser}>Save</Button>
        </>
    }
</Modal.Footer>

核心问题2:useEffect内状态异步更新导致请求参数错误

即便修复语法错误后,你也可能误以为useEffect没触发,实际是请求参数不符合预期:
React的setState是异步更新的,你在useEffect内执行setRole(Cookies.get('role'))后,当前渲染周期内的role状态还是初始的空字符串,导致请求携带的user_id为空,接口无法返回预期结果。
修正后的useEffect代码如下:

useEffect(() => {
    // 加日志可直接在控制台确认useEffect是否执行
    console.log('useEffect已触发')
    const token = Cookies.get('token');
    // 直接从Cookie取值使用,不依赖异步更新的state
    const roleFromCookie = Cookies.get('role');
    setRole(roleFromCookie);
    fetch(`${process.env.API_URL}/user/user-details`, {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            "user_id": roleFromCookie,
            "language": "en",
            "api_token": token
        })
    })
        .then((user) => user.json())
        .then((thisUserData) => {
            console.log('接口返回结果:', thisUserData)
            if (thisUserData.status_code == 200) {
                setThisUser(thisUserData)
            }
        })
        // 新增错误捕获,排查网络或接口报错
        .catch(err => console.error('请求报错:', err))
}, [])

其他优化点

你在模板中判断role.indexOf('admin') > -1时,建议增加空值判断,避免role为undefined时报错,修改为:

{role?.indexOf('admin') > -1 ?
    <button className="btn btnedit" onClick={handleShow}>Add Sub-Admin</button>
    : ''}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:05