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

React调用数据库数据后循环内bulmaCollapsible折叠功能失效如何解决

问题根源

bulmaCollapsible 是原生JS实现的组件,需要主动调用attach方法为页面上已存在的.is-collapsible元素绑定折叠交互事件。你当前的代码只在组件首次挂载完成后执行了一次attach:

  • 静态赋值场景下,trainingData初始化就有值,首次渲染时所有折叠卡片DOM已经生成,attach能正常找到元素绑定事件,所以功能正常
  • 接口请求是异步操作,首次挂载执行attach时trainingData为空,没有对应的折叠卡片DOM,事件没有绑定成功;等接口返回数据更新trainingData、重新渲染出卡片后,没有再次执行attach绑定事件,因此折叠功能失效

修复步骤

1. 调整bulmaCollapsible初始化的useEffect依赖

将trainingData加入useEffect的依赖数组,保证每次trainingData更新、卡片重新渲染后,都会重新执行事件绑定:

useEffect(() => {
    // 没有数据或容器未挂载时无需执行绑定
    if (trainingData.length === 0 || !collapsiblesRef.current) return
    bulmaCollapsible.attach(".is-collapsible", {
        container: collapsiblesRef.current
    });
}, [trainingData])

2. 优化列表渲染的key值(可选但推荐)

不要用数组索引作为map的key,改用数据里唯一的trainingsid,避免数组顺序变化导致的DOM复用异常:

{trainingData.map((d, i) => (
    <div className="card" key={d.trainingsid}>
        {/* 剩余原有内容不变 */}
    </div>
))}

内容的提问来源于stack exchange,提问作者Mr. Hankey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:02