React:实现一个增删改查基本管理页面

13 篇文章 0 订阅

记录一下最近根据自己写代码的习惯进行了一个改进后的写法调整,主要是为了增强可阅读性与美观性的,实现了增删改查等基础功能,用的react+typescript开发。

import { inject,observer } from 'mobx-react';
import * as React from 'react';
import { Table, Input, Button,Modal, Form, Select,message } from 'antd';
import { FormInstance } from 'antd/lib/form';
import { ExclamationCircleOutlined } from "@ant-design/icons";
import { columns } from './constans';
import { API } from "@/http";
import './style.less';
const { Search } = Input;
const { Option } = Select;
const { confirm } = Modal;
const formRef = React.createRef<FormInstance>();

const layout = {
	labelCol: { span: 6 },
	wrapperCol: { span: 18 },
};
interface IProps {
	children: React.ReactNode;
	home: any;
	global: any;
	route: any;
}
interface IState {
	visible: boolean;
	dataSource: any[];
	typeList: any[];
	total:number;
	title:string;
	isEdit:boolean;
	initReqParams:{
		page: number;
		pageSize: number;
	};
	editId:number;
	search:string;
}

class DataManager extends React.Component<IProps, IState> {
	constructor(IProps: any) {
		super(IProps);
	}
	state: IState = {
		visible: false,
		dataSource: [],
		typeList:[],
		total: 0,
		title: '',
		isEdit: false,
		editId:undefined,
		initReqParams: {
			page: 1,
			pageSize: 10,
		},
		search:'',
	};
	componentDidMount = ()=>{
		this.getDataSourceList();
		this.getDataType();
	}
	// 获取数据源类型
	getDataType = async ()=>{
		try {
			const res = await API.getDataType()
	      	if (res.success) {
	        	this.setState({
					typeList: res.data,
				})
	      	}
	    } catch (error) {
	      	console.log(error,'error')
	    }
	}
	// 获取数据源列表信息
	getDataSourceList = async () => {
		const {initReqParams, search} = this.state;
		const params = {
			...initReqParams,
			search
		};
	    try {
			const res = await API.getDataSourceList(params)
	      	if (res.success) {
	        	this.setState({
						dataSource: res.data.list,
						total: res.data.total
				})
	      	}
	    } catch (error) {
	      	console.log(error,'error')
	    }
	}
	// 分页
	onPageChange = (page) => {
		const { initReqParams } = this.state;
		this.setState({
			initReqParams: {
				...initReqParams,
				page: page,
				pageSize: 10,
			},
		}, () => {
			this.getDataSourceList();
		})
	}
	// 搜索字段
	changeSearch = (value) =>{
		this.setState({
			search: value ? value.trim() : "",
		}, () => {
			this.getDataSourceList();
		})
	}
	// 新增数据源
	toAdd = () => {
		this.setState({
			visible: true,
			title:'新增数据源',
			isEdit:false,
		});
	};
	// 编辑数据源
	toEdit = (record)=>{
		this.setState({
			visible:true,
			title:'编辑数据源',
			isEdit:true,
			editId: record.id,
	    },() => {
	    formRef.current.setFieldsValue({
			dataName: record.dataName,
			dataType: record.dataType,
			describe: record.describe,
			url: record.url,
	      });
	    });
	}
	// 删除数据源
	toDelete = (id) => {
	    confirm({
	      title: "删除后无法恢复,确定删除该数据源吗?",
	      icon: <ExclamationCircleOutlined />,
	      okText: "确认",
	      cancelText: "取消",
	      onOk: async () => {
			try {
				const { success, message: msg } = await API.deleteDataSource({id});
				if(success) {
					message.success('删除成功');
					this.getDataSourceList()
				} else {
					message.error(msg);
				}
			} catch (error) {
				console.log(error,'error')
			}
		},
	     onCancel() {
	        message.error("删除取消");
	      },
	   });
	};
	
	// 保存新增编辑数据源
	okSave = () => {
		const {isEdit, editId} = this.state;
		formRef.current.validateFields().then((value) => {
			const saveObj = {
				dataName: value.dataName,
				dataType: value.dataType,
				describe: value.describe,
				url: value.url,
			}
			if(isEdit){
				saveObj['id'] = editId;
			}
			this.save(saveObj);
		})
	}
	save = async(saveObj)=>{
		try{
			const { success, message: msg } = await API.toSaveDataSource(saveObj);
			if(success) {
				message.success('保存成功');
				this.setState({
					visible: false,
					editId: undefined,
					isEdit: false,
				})
				this.getDataSourceList()
			} else {
				message.error(msg);
			}
		}catch(error){
			console.log(error,"error")
		}
	}
	// 关闭新增编辑模态框
	onCancel = () => {
		this.setState({
			visible: false,
			isEdit: false,
			editId: undefined,
		},()=>{
			formRef.current.setFieldsValue({
				dataName: undefined,
				dataType: undefined,
				describe: undefined,
				url: undefined,
			})
		});
	};
	render() {
		const { visible, title, initReqParams, total, dataSource, typeList} = this.state;
		const allType = typeList? typeList.map((item) => {
          return (
            <Option key={item.id} value={item.name}>{item.name}</Option>
          );
        })
      : null;
		return (
			<div className="pager-data-manager">
				<div className="data-manager-content">
					<div className="data-manager-header">
						<Search
						  allowClear
							placeholder="搜索数据源"
							onSearch={(value) => {this.changeSearch(value)}}
							style={{ width: 200 }}
						/>
						<Button type="primary" onClick={this.toAdd.bind(this)}>
							添加数据源
						</Button>
					</div>
					<Table 
						columns={columns({toEdit:this.toEdit, toDelete:this.toDelete})} 
						dataSource={dataSource}
						pagination={{
							pageSize: initReqParams.pageSize,
							current: initReqParams.page,
							total: total,
							size: 'small',
							showTotal:total =>  `共计 ${total} 条`,
							onChange: this.onPageChange,
						}}
				 	/>
					<Modal
			            visible={visible}
			            title={title}
			            okText="确定"
			            cancelText="取消"
			            onCancel={this.onCancel.bind(this)}
			            onOk={this.okSave.bind(this)}
			          >
            			<Form
							{...layout}
							name="dataRecord"
							ref={formRef}
						>
							<Form.Item
								label="来源类型"
								name="dataType"
								rules={[{ required: true, message: '请选择数据来源类型' }]}
							>
								<Select
									allowClear
									placeholder="请选择数据来源类型"
								>
									{allType}
								</Select>
							</Form.Item>
							<Form.Item
								label="数据源名称"
								name="dataName"
								rules={[
									{ required: true, message: '请输入数据源名称' },
									{
										pattern: /^([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5])+$/ig,
										message: "仅支持数字、中英文"
									}
								]}
							>
								<Input placeholder='请输入数据源名称'/>
							</Form.Item>
							<Form.Item
								label="URL"
								name="url"
								rules={[{ required: true, message: '请输入url' },
								{type: 'url', message: '请输入正确的url'}]}
							>
								<Input placeholder='请输入url'/>
							</Form.Item>
							<Form.Item
								label="描述"
								name="describe"
								rules={[{ message: '描述数据功能,可选输入' }]}
							>
								<Input.TextArea placeholder='请输入数据功能的描述'/>
							</Form.Item>
						</Form>
					</Modal>
				</div>
			</div>
		);
	}
}
export default inject('global')(observer(DataManager))

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于开发Java应用程序的框架,它简化了Java开发的很多繁琐过程,提供了快速搭建应用的能力。React一个用于构建用户界面的JavaScript库,它能够帮助我们构建可复用的UI组件。 要在Spring Boot项目中集成React,可以按照以下步骤进行操作: 1. 创建一个基于Spring Boot的项目,可以使用Spring Initializer快速创建一个空白项目结构。 2. 安装Node.js并使用npm来管理项目依赖。在项目根目录下创建一个新的目录作为前端代码的根目录。 3. 使用npm安装React的依赖:运行`npm install react react-dom`命令。 4. 创建一个入口HTML文件,可以命名为`index.html`,并将其放置在前端代码根目录中。在该HTML文件中,引入React的核心库文件。 5. 创建一个入口JavaScript文件,可以命名为`index.js`,并将其放置在前端代码根目录中。在该JavaScript文件中,编写React组件的代码逻辑。 6. 使用Webpack等前端构建工具,将React的代码编译打包成静态资源文件。配置Webpack的配置文件,将入口JavaScript文件作为打包的入口。 7. 在Spring Boot项目中创建一个RESTful API接口,用于处理前端发送的请求。可以使用Spring MVC来实现这些接口。 8. 在Spring Boot项目中的Controller层中,处理前端发送的增删改查的请求,并调用对应的服务层方法进行具体的业务处理。 9. 在前端代码中,通过Fetch API或者Axios等工具,发送HTTP请求到Spring Boot项目的RESTful API接口,实现与后端的数据交互。 10. 在页面中显示查询到的数据,并提供增删改操作的界面。可以使用React的组件库来构建界面,或者自行编写组件。 通过以上步骤,我们就可以在Spring Boot项目中集成React实现增删改查的操作。前端使用React构建用户界面,发送HTTP请求到后端的Spring Boot项目中,后端根据请求的类型进行相应的数据操作,再将结果返回给前端进行显示。这样就完成了一个基本增删改查功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值