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

React点击按钮先弹提示再跳转触发TypeError错误如何修复

问题解决方案

报错根因

React 中 useState 提供的状态更新函数(此处为setOpen)是同步执行的,无返回值,因此调用setOpen(true)后得到的是undefined,自然无法调用.then()方法,也就会抛出你遇到的类型错误。

实现方案

根据实际需求选择对应方案即可:

方案一:弹窗展示后自动跳转

如果你需要弹窗出现后自动执行跳转,可以配合useEffect监听open状态的变化来实现,还可以添加自定义延时让用户有时间看清提示内容:

import React, { useState, useEffect } from 'react';

export default function ProjectCard1() {
  const [open, setOpen] = useState(false);

  // 监听open状态变化,弹窗打开后执行跳转逻辑
  useEffect(() => {
    if (open) {
      // 示例延时1.5秒后跳转,可根据需求调整时长或者直接去掉延时
      const timer = setTimeout(() => {
        window.open("https://project-uts-teori.vercel.app/");
        // 跳转后可主动关闭弹窗
        setOpen(false);
      }, 1500);
      return () => clearTimeout(timer);
    }
  }, [open]);

  const handleClick = () => {
    // 直接更新状态打开弹窗即可,不需要调用then
    setOpen(true);
  };

  const handleClose = (event, reason) => {
    if (reason === 'clickaway') {
      return;
    }
    setOpen(false);
  };

  // 此处保留你原有组件的弹窗、按钮渲染逻辑即可
}

方案二:用户确认弹窗后再跳转

如果需要用户主动点击确认按钮后才执行跳转,直接把跳转逻辑绑定到弹窗的确认按钮点击事件上即可:

import React, { useState } from 'react';
// 示例用MUI组件,可替换为你实际使用的弹窗组件
import { Dialog, DialogActions, Button, Alert } from '@mui/material';

export default function ProjectCard1() {
  const [open, setOpen] = useState(false);

  const handleClick = () => {
    setOpen(true);
  };

  const handleClose = (event, reason) => {
    if (reason === 'clickaway') {
      return;
    }
    setOpen(false);
  };

  // 确认按钮触发跳转
  const handleConfirm = () => {
    window.open("https://project-uts-teori.vercel.app/");
    setOpen(false);
  };

  return (
    <div>
      <Button onClick={handleClick}>访问项目</Button>
      <Dialog open={open} onClose={handleClose}>
        <Alert severity="info">即将跳转到外部项目站点</Alert>
        <DialogActions>
          <Button onClick={handleClose}>取消</Button>
          <Button onClick={handleConfirm}>确认跳转</Button>
        </DialogActions>
      </Dialog>
    </div>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:07