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

ReactJS点击按钮新增子div组件 实现Bootstrap网格与列表视图切换

Bootstrap网格/列表视图切换实现方案

不需要编写两份重复的DOM返回逻辑,有两种更简洁易维护的实现方案可选:

方案1:条件渲染包裹层(适配需要调整DOM嵌套结构的场景)

你只需要通过视图状态判断是否渲染col包裹层即可,无需重复写列表遍历逻辑:

// 先定义控制视图的状态,点击按钮时切换该状态即可
const [isListView, setIsListView] = useState(false);

// 渲染逻辑
<div className="row">
  {isListView ? (
    <div className="col">
      {notes.map((item, key) => <Noteitem key={key} item={item} />)}
    </div>
  ) : (
    notes.map((item, key) => <Noteitem key={key} item={item} />)
  )}
</div>

方案2:仅通过Bootstrap类名切换(更推荐,性能更优)

不需要修改DOM嵌套结构,直接通过不同视图下的列类控制卡片宽度即可实现切换,渲染开销更低,代码无冗余:

const [isListView, setIsListView] = useState(false);
// 网格视图可根据需求自定义列宽,比如col-md-4一行放3个,col-sm-6小屏一行放2个
const colClass = isListView ? 'col-12' : 'col-md-4 col-sm-6';

<div className="row">
  {notes.map((item, key) => (
    <div key={key} className={colClass}>
      <Noteitem item={item} />
    </div>
  ))}
</div>

如果你的Noteitem组件本身支持传入className属性,可以直接把colClass传给组件,无需额外加外层div。

注意:map遍历渲染子组件时请补充唯一key属性,避免React抛出语法告警。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:03