// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端
'use client';
import { Button,Card, Space,Tag,Table,message,Input } from 'antd';
import { useEffect,useState } from 'react';
import http from '@/app/comm/http.js';
import "../dade.css";export default function Index() {const [messageApi,contextHolder] = message.useMessage();// 使用 useState 管理数据状态let [data, setData] = useState([]);// 加载镜像let select = () => {http.post('/index/select', {}).then((res) => {if(res.data.code == 2000){messageApi.open({type:'success',content: '加载成功', })setData(res.data.data);}// 处理响应数据}).catch(err => {console.error('请求出错:', err);messageApi.open({type: 'error',content: '加载失败', })});}const columns = [{title: '序号',dataIndex: 'index', width: 70,render: (_, __, index) => index + 1,},{title: '备注',dataIndex: 'name',width: 200,render: (_, record,index) => (<Space.Compact style={{ width: '100%' }}><Input value={record.name} size="small" placeholder='备注' onChange={(e) => handleInputChange(e,index,"name")}/><Button type="primary" size="small">更改</Button></Space.Compact>)},{title: '容器名称',dataIndex: 'names',},{title: '启动状态',dataIndex: 'status',width: 100,render: (_, record) => {// 检查状态字符串是否包含 "Up" 来判断容器是否运行中const isRunning = record.status.includes('Up');// 根据状态设置标签颜色和显示文本const color = isRunning ? 'green' : 'red';const text = isRunning ? '已启动' : '未启动';return <Tag color={color}>{text}</Tag>;}},{title: '镜像',dataIndex: 'image',width: 100,},{title: '端口映射(主机->容器)',dataIndex: 'ports',},{title: '挂载卷',dataIndex: 'address',},{title: '操作',dataIndex: 'address',width: 100,render: (_, record,index) => (<Space size="middle"><span style={{color:"#4096ff"}} onClick={() => update(record)}>编辑</span><span style={{color:'red'}} onClick={() => update(record)}>删除</span></Space>),},];// 容器列表数据const [data1, setData1] = useState([])// 数据双向绑定let handleInputChange = (ev,index,name) => {console.log(ev.target.value)data1[index][name] = ev.target.value;setData1([...data1])};// 加载容器列表let selectDocker = () => {http.post('/index/selectDocker', {}).then((res) => {if(res.data.code == 2000){let dade = res.data.data;dade.map((item,index) => {item.key = index; })setData1(dade)}// 处理响应数据}).catch(err => {console.error('请求出错:', err);messageApi.open({type: 'error',content: '加载失败', })});}// 刷新let refresh = () => {select();selectDocker()}let post = 1;useEffect(() => {if (post == 1) {post = 0;select();selectDocker()}}, []);// 编辑let update = (record) => {console.log(record)}// 选择行const [selectedRowKeys, setSelectedRowKeys] = useState([]);const onSelectChange = newSelectedRowKeys => {console.log('selectedRowKeys changed: ', newSelectedRowKeys);setSelectedRowKeys(newSelectedRowKeys);};const rowSelection = {selectedRowKeys,onChange: onSelectChange,};// 批量更新const listClick = () => {console.log(selectedRowKeys)};return (<div>{contextHolder}<div><Button type="primary" onClick={refresh}>刷新</Button><Button type="primary" style={{marginLeft:"10px"}}>新增容器</Button><Button type="primary" style={{marginLeft:"10px"}} onClick={listClick}>批量更新</Button></div><div style={{marginTop:"10px",display:"flex"}}><Space direction="vertical" size={16}><Card title="容器镜像版本"><div style={{height:"75vh",overflow:"auto"}}>{data.map((item, index) => (<div key={index} >{index == 0 ? <Tag color="green">镜像{item.repository}:{item.tag},大小:{item.size}</Tag> : <Tag style={{marginTop:"10px"}} color="green">镜像{item.repository}:{item.tag},大小:{item.size}</Tag>}</div>))}</div></Card></Space>{/* 容器列表 */}<div style={{marginLeft:"10px",width:"100%",height:"86vh",overflow:"auto"}}><Table size='small' rowSelection={rowSelection} columns={columns} dataSource={data1} pagination={false} scroll={{ y: "80vh"}} bordered/></div></div></div>);
}
react更新页面数据,操作页面,双向数据绑定
2025/6/10 9:33:51
来源:https://blog.csdn.net/qq_34631220/article/details/148528022
浏览:
次
关键词:react更新页面数据,操作页面,双向数据绑定
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com
-
【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
-
抑郁症患者数据分析
-
【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)
热文排行
最新新闻
- 【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
- 【Python零基础入门系列】第1篇:Python 是什么?怎么装环境?推荐哪些 IDE?
- 第18节 Node.js Web 模块
- 宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found
- USB扩展器与USB服务器的2个主要区别
- PyTorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)
- 若依框架(RuoYi)中实现部门及子部门用户查询的SQL逻辑解析
- 使用HTML5 Canvas 实现呼吸粒子球动画效果的原理
- B+Tree在mysql中的使用
- 抑郁症患者数据分析
推荐新闻
- 【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
- 【Python零基础入门系列】第1篇:Python 是什么?怎么装环境?推荐哪些 IDE?
- 第18节 Node.js Web 模块
- 宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found
- USB扩展器与USB服务器的2个主要区别
- PyTorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)
- 若依框架(RuoYi)中实现部门及子部门用户查询的SQL逻辑解析
- 使用HTML5 Canvas 实现呼吸粒子球动画效果的原理
- B+Tree在mysql中的使用
- 抑郁症患者数据分析