react更新页面数据,操作页面,双向数据绑定

news2025/7/26 22:22:02

在这里插入图片描述

// 路由不是组件的直接跳转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>
  );
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python异步编程:深入理解协程的原理与实践指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …

基于小程序老人监护管理系统源码数据库文档

摘 要 近年来&#xff0c;随着我国人口老龄化问题日益严重&#xff0c;独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长&#xff0c;随之而来的是日益突出的老年人问题&#xff0c;尤其是老年人的健康问题&#xff0c;尤其是老年人产生健康问题后&…

理想汽车5月交付40856辆,同比增长16.7%

6月1日&#xff0c;理想汽车官方宣布&#xff0c;5月交付新车40856辆&#xff0c;同比增长16.7%。截至2025年5月31日&#xff0c;理想汽车历史累计交付量为1301531辆。 官方表示&#xff0c;理想L系列智能焕新版在5月正式发布&#xff0c;全系产品力有显著的提升&#xff0c;每…

运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.

报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符&#xff0c;最后运行&#xff1a;npm run lint --fix

智警杯备赛--excel模块

数据透视与图表制作 创建步骤 创建 1.在Excel的插入或者数据标签页下找到数据透视表的按钮 2.将数据放进“请选择单元格区域“中&#xff0c;点击确定 这是最终结果&#xff0c;但是由于环境启不了&#xff0c;这里用的是自己的excel&#xff0c;真实的环境中的excel根据实训…

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…

Axure Rp 11 安装、汉化、授权

Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接&#xff1a;https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14&#xff1a;多组学MR联合单细胞时空分析&#xff0c;锁定心血管代谢疾病的免疫治疗新靶点 当下&#xff0c;免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入&#xff0c;我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表&#xff0c;并对每一个位置进行分类。这种做法既浪费又低效&#xff0c;并且需要额外的后处理。在本文中&#xff0c;我们采取了不同的方法。我们将物体建模为单…

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客&#xff1a;基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目&#xff0c;该项目展示了一个强大的框架&#xff0c;旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人&#xff0c;更是一个集…

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…

vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能

vxe-table vue 表格复选框多选数据&#xff0c;实现快捷键 Shift 批量选择功能 查看官网&#xff1a;https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数&#xff08;使用 ICMP Echo 请求&#xff09;-T 参数&#xff08;使用 TCP SYN 包&#xff09; 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11&#xff0c;在/s…

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件&#xff0c;这次有个需求是要兼容xp环境&#xff0c;xp上chrome最高支持到49&#xff0c;虽然说iframe或者embed都可以实现预览pdf&#xff0c;但为了后续的定制化需求&#xff0c;还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…