react_7

news/2024/7/15 18:06:17 标签: react.js, 前端, javascript
删除
import { Button, Popconfirm, message } from "antd";
import axios from "axios";
import R from "../model/R";

export default function A6Delete({
  id,
  onSuccess,
}: {
  id: number;
  onSuccess?: () => void;
}) {
  async function onConfirm() {
    const resp = await axios.delete<R<string>>(
      `http://localhost:8080/api/students/${id}`
    );
    message.success(resp.data.data);
    onSuccess && onSuccess();
  }
  return (
    <Popconfirm title="确定删除学生吗" onConfirm={onConfirm}>
      <Button danger size="small">
        删除
      </Button>
    </Popconfirm>
  );
}

使用删除组件

import { Button, Input, Select, Space, Table } from "antd";
import { PageResp, Student, StudentQueryForm } from "../model/Student";
import { ColumnsType, TablePaginationConfig } from "antd/es/table";
import { ChangeEvent, useEffect, useState } from "react";
import axios from "axios";
import R from "../model/R";
import A6Delete from "./A6Delete";
import A6Update from "./A6Update";
import A6Insert from "./A6Insert";
import A6DeleteSelected from "./A6DeleteSelected";
// 服务端分页
const { Option } = Select;
export default function A6() {
  const [students, setStudents] = useState<Student[]>([]);
  const [loading, setLoading] = useState(true);
  const [form, setForm] = useState<StudentQueryForm>({});
  const options = [
    { label: "男", value: "男" },
    { label: "女", value: "女" },
  ];
  const [pagination, setPagination] = useState<TablePaginationConfig>({
    current: 1,
    pageSize: 5,
    showSizeChanger: true,
    pageSizeOptions: [1, 3, 5, 7],
  });
  useEffect(() => {
    async function getStudents() {
      const resp = await axios.get<R<PageResp<Student>>>(
        "http://localhost:8080/api/students/q",
        {
          params: {
            page: pagination.current,
            size: pagination.pageSize,
            ...form,
          },
        }
      );
      setStudents(resp.data.data.list);

      setPagination((old) => {
        const newPagination = { ...old, total: resp.data.data.total };
        console.log(newPagination);
        // 服务端分页需要total属性
        return newPagination;
      });
    }

    setLoading(false);
    getStudents();
    // 当页号和每页记录数改变了重新查询
  }, [pagination.current, pagination.pageSize, form]);
  function onTableChange(newPagination: TablePaginationConfig) {
    setPagination(newPagination);
  }
  function onNameChang(e: ChangeEvent<HTMLInputElement>) {
    setForm((old) => {
      return { ...old, name: e.target.value };
    });
  }
  function onSexChange(value: string) {
    setForm((old) => {
      return { ...old, sex: value };
    });
  }
  function onAgeChange(value: string) {
    setForm((old) => {
      return { ...old, age: value };
    });
  }
  function onDeleteSuccess() {
    //当点击删除按钮删除成功之后,返回一个新的form对象,触发useEffect函数,重新查询数据更新页面
    setForm((old) => {
      return { ...old };
    });
  }
  //修改功能开始
  function onUpdateSuccess() {
    setUpdateOpen(false);
    setForm((old) => {
      return { ...old };
    });
  }
  function onUpdateClick(student: Student) {
    setUpdateOpen(true);
    setUpdateForm(student);
  }
  function onUpdateCancel() {
    setUpdateOpen(false);
  }
  const [updateForm, setUpdateForm] = useState<Student>({
    id: 3,
    name: "",
    sex: "女",
    age: 33,
  });
  const [updateOpen, setUpdateOpen] = useState(false);
  //修改功能结束
  //新增功能开始
  function onInsertSuccess() {
    setInsertOpen(false);
    setForm((old) => {
      return { ...old };
    });
  }
  function onInsertClick() {
    setInsertOpen(true);
  }
  function onInsertCancel() {
    setInsertOpen(false);
  }
  const [InsertForm, setInsertForm] = useState<Student>({
    id: 3,
    name: "拉拉",
    sex: "女",
    age: 33,
  });
  const [InsertOpen, setInsertOpen] = useState(false);
  //新增功能结束
  //删除选中功能开始
  const [ids, setIds] = useState<React.Key[]>([]);
  function onIdsChange(ids: React.Key[]) {
    setIds(ids);
  }
  function onDeleteSelectedSuccess() {
    setForm((old) => {
      return { ...old };
    });
    setIds([]);
  }
  //删除选中功能结束
  const columns: ColumnsType<Student> = [
    { title: "编号", dataIndex: "id" },
    { title: "姓名", dataIndex: "name" },
    { title: "性别", dataIndex: "sex" },
    { title: "年龄", dataIndex: "age" },
    {
      title: "操作",
      dataIndex: "operation",
      render: (_, student) => {
        return (
          <Space>
{/* 使用删除组件 */}
            <A6Delete id={student.id} onSuccess={onDeleteSuccess}></A6Delete>
            <Button
              type="primary"
              size="small"
              //   如果事件函数需要传入参数,这个函数应该放在箭头函数里面
              onClick={() => {
                onUpdateClick(student);
              }}
            >
              修改
            </Button>
          </Space>
        );
      },
    },
  ];
  return (
    <div>
 {/* 使用新增组件 */}
      <A6Insert
        open={InsertOpen}
        onSuccess={onInsertSuccess}
        onCancel={onInsertCancel}
        student={InsertForm}
      ></A6Insert>
 {/* 使用修改组件 每行都同用一个修改组件*/}
      <A6Update
        open={updateOpen}
        student={updateForm}
        onSuccess={onUpdateSuccess}
        onCancel={onUpdateCancel}
      ></A6Update>
      <div>
        <Input
          style={{ width: 120 }}
          placeholder="请输入姓名"
          onChange={onNameChang}
          value={form.name}
        ></Input>
        <Select
          style={{ width: 120 }}
          placeholder="请选择性别"
          options={options}
          allowClear={true}
          value={form.sex}
          onChange={onSexChange}
        ></Select>
        <Select
          style={{ width: 120 }}
          placeholder="请选择年龄"
          allowClear={true}
          value={form.age}
          onChange={onAgeChange}
        >
          <Option value="1,19">20以下</Option>
          <Option value="20,29">20左右</Option>
          <Option value="30,39">30左右</Option>
          <Option value="40,120">40以上</Option>
        </Select>
        <Space>
          <Button type="primary" size="small" onClick={onInsertClick}>
            新增
          </Button>
{/* 使用删除选中组件 */}
          <A6DeleteSelected
            ids={ids}
            onSuccess={onDeleteSelectedSuccess}
          ></A6DeleteSelected>
        </Space>
      </div>
      <Table
        columns={columns}
        dataSource={students}
        rowKey="id"
        loading={loading}
        pagination={pagination}
        onChange={onTableChange}
        rowSelection={{ selectedRowKeys: ids, onChange: onIdsChange }}
      ></Table>
    </div>
  );
}


http://www.niftyadmin.cn/n/5149361.html

相关文章

react_11

MobX 介绍 需求&#xff0c;组件0 改变了数据&#xff0c;其它组件也想获得改变后的数据&#xff0c;如图所示 这种多个组件之间要共享状态数据&#xff0c;useState 就不够用了&#xff0c;useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…

蓝桥杯官网填空题(算式问题)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 看这个算式&#xff1a; ☆☆☆ ☆☆☆ ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法&#xff1f; 173 286 459 …

Day19力扣打卡

打卡记录 填充每个节点的下一个右侧节点指针 II&#xff08;BFS层序遍历&#xff09; 链接 采用BFS层序遍历&#xff0c;将每一层的节点遍历之后存入数组中&#xff0c;再对数组中一层中的所有节点遍历来进行next连接&#xff0c;再同时更新下一层的所有节点到数组当中。 /*…

在Vue项目中定义全局变量

在Vue项目中我们需要使用许多的变量来维护数据的流向和状态&#xff0c;这些变量可以是本地变量、组件变量、父子组件变量等&#xff0c;但这些变量都是有局限性的。在一些场景中&#xff0c;可能需要在多个组件中共享某个变量&#xff0c;此时全局变量就派上了用场。 定义全局…

android隐藏输入法的一些尝试,最后一个可行

一、背景&#xff1a; 基于android开发自己的输入法app&#xff0c;用户需要手动收起输入法 二、准备工作&#xff1a; 定义类 public class CustIMS extends InputMethodService {} 和 xml声明三、尝试验证&#xff1a; 1、CustIMS.hideWindow(); 结论&#xff1a;这个在…

使用C++的QT框架实现五子棋

最近有点无聊正好想玩五子棋&#xff0c;那就实现一下这个游戏吧&#xff0c;网上的五子棋逻辑又长又复杂&#xff0c;我这个逻辑还是蛮简单的&#xff0c;展示如下 这是一个简单的五子棋&#xff0c;今天就了解一下这个游戏的思路&#xff0c;使用的是QT框架&#xff0c;只要思…

高级 Python:函数

伊利亚拉扎列维奇 一、说明 读完标题后&#xff0c;你可能会问自己一些类似的事情&#xff0c;“Python 中的函数是一个高级概念&#xff1f;如何&#xff1f;所有课程都引入了功能作为语言的基本块。你既是对的&#xff0c;也是错的。 大多数关于 Python 的课程都将函数作为基…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能&#xff0c;本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量&#xff0c;环境变量只有当选择了该环境时才生效&#xff0c;…