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

NextJS调用外部Bootstrap组件无响应问题求助(附代码)

解决NextJS点击按钮跳转页面无变化的问题

你的问题根源是直接调用组件函数不会触发页面跳转——HotelDetails(id)只是执行了组件函数,返回了JSX元素,但这段元素没有被渲染到页面,也没有触发NextJS的路由机制,所以页面没变化,只有控制台打印日志。

下面是两种可行的解决方案:

方案1:编程式导航(useRouter)

NextJS提供useRouter钩子实现编程式页面跳转,步骤如下:

第一步:把hotelDetails.tsx改成动态路由页面

将hotelDetails.tsx移动到pages/hotel/[id].tsx(新建hotel目录),修改代码获取路由参数:

import Card from 'react-bootstrap/Card';
import Col from 'react-bootstrap/Col';
import Row from 'react-bootstrap/Row';
import Button from 'react-bootstrap/Button';
import Hotel from '../../src/api/booking/booking';
import { useEffect, useState } from 'react';
import Container from 'react-bootstrap/Container';
import ListGroup from 'react-bootstrap/ListGroup';
import Form from 'react-bootstrap/Form';
import Layout from '@/src/components/layout';
import { useRouter } from 'next/router';

export default function HotelDetails() {
    const router = useRouter();
    const { id } = router.query; // 获取路由中的酒店ID

    console.log('当前酒店ID:', id);

    return(
        <Layout>   
            <Container>
                <p>Hello, World! 酒店ID: {id}</p>
            </Container>
        </Layout>
    );
}

第二步:修改Booking组件的按钮点击事件

在index.tsx中,将按钮的onClick改为调用router.push跳转:

// 替换原来的按钮代码
<Button onClick={() => router.push(`/hotel/${hotel[hotelItem]['hotelId']}`)} variant="info">View Details</Button>

方案2:声明式导航(Link组件)

用NextJS的Link组件包裹按钮,更符合React的声明式风格:

import Link from 'next/link';

// 替换原来的按钮
<Link href={`/hotel/${hotel[hotelItem]['hotelId']}`} passHref>
  <Button variant="info">View Details</Button>
</Link>

额外优化:修复useEffect的依赖问题

你代码中的第二个useEffect没有依赖数组,会导致组件每次渲染都重复调用GetFacilitiesHotel,建议加上空数组让它只执行一次:

useEffect(() => {
    Hotel.GetFacilitiesHotel(1).then(data => {
        setFacility(data)
    })
}, []) // 空数组表示仅在组件挂载时执行一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:25:00