关于react-admin+material ui项目的总结

简介: 关于react-admin+material ui项目的总结

前言

大家好 我是歌谣 今天对于自己的项目做个详细的总结


背景

为了更好的进行前后端的设计开发 后端目前用postgrest设计数据库 前端直接使用react-admin和material ui 5.0进行开发 大大增加开发效率


技术栈

后端 postgrest 前端 react-admin+material ui


页面设计结构

程序的设计分为三个部分 路由 数据 呈现 页面的设计分为三个大块 就是图中的左中右三块


image.png


涉及的局部知识点

弹性布局代码

<Grid style={{ margin: 0, padding: 0, display: "flex" }} >
 <Grid style={{ width: "200px", margin: "24px 0 0 24px" }} >
 xxxx
 </Grid>
      <Grid style={{ flexGrow: "1", margin: "24px 0 0 24px" }} >
      xxxxx
      </Grid>
    </Grid>




以上就是形成弹性布局的核心代码 向对应的页面中插入dom节点即可展示


左侧 Rc-tree

安装 yarn add rc-tree 务必引入样式


import "rc-tree/assets/index.css"


image.png


数据转换部分

image.png


数据需要转换为带有title和key的数据 转换的方式有很多种 这边简单写一下转换的过程


dataProviders.getStyleTree('t_prod_category', 't_prod_style').then((res: any) => {
      console.log(res, "resssssssss")
      let arr: any = []
      let arr1: any = [{
        key: 0,
        title: "品类管理",
      }]
      res && res.map((item: any, index: number) => {
        arr.push({ key: item.id, title: item.category_name, children: [] })
        item.t_prod_style && item.t_prod_style.map((item1: any, index1: any) => {
          if (arr.children) {
            arr[index].children = []
          }
          arr[index].children.push({ key: item1.id, title: item1.style_name })
        })
      })
      console.log(arr, "arr")
      arr1[0].children = arr
      setTreeDataList(arr1)
    })




右侧react-admin

利用react-admin自带router属性进行反复嵌套


<Admin
            dataProvider={dataProvider}
            basename='/categoryman'
            layout={appLayout}
            i18nProvider={i18nProvider}
          >
            <Resource name='t_base_materiel_type' list={MaterialTypeList} recordRepresentation="name" create={MaterialTypeAdd} edit={MaterialTypeEdit} />
            <Resource name='t_prod_category' recordRepresentation="category_name" list={CategoryList} show={CategoryShow} create={CategoryAdd} edit={CategoryEdit} hasEdit />
            <CustomRoutes>
              <Route path="CatagoryTitle" element={
                <CatagoryTitle handleUpdateList={handleUpdateList}></CatagoryTitle>
              } />
            </CustomRoutes>
          </Admin>




目录数据设计 上下两层 分为两个组件


image.png

组件目录设计

image.png


小结

增删改查的设计直接利用react-admin即可实现 页面得增删改查可以直接通过表名进行数据 得增删改查设计


贴出增加修改代码

import * as React from 'react';
import { Create, ReferenceInput, SelectInput, SimpleForm, TextInput } from 'react-admin';
import { useNavigate } from "react-router-dom";
import { UserContext } from '../ProductList/CategoryLayout';
export const MaterialStyleListAdd = (props: any) => {
    const navigate = useNavigate()
    const StyleContext:any=React.useContext(UserContext)
    const onSuccess = (data: any) => {
        navigate(-1)
    };
    return (
        <Create mutationOptions={{ onSuccess }} 
        >
            <SimpleForm>
                <ReferenceInput source="style_id" reference="t_prod_style" >
                    <SelectInput disabled defaultValue={StyleContext.styleId}></SelectInput>
                </ReferenceInput>
                <ReferenceInput filter={{ mat_type: StyleContext.typeId }} source="mat_id" reference="t_base_materiel" >
                    <SelectInput></SelectInput>
                </ReferenceInput>
                <TextInput source="count" />
                <TextInput source="description" />
            </SimpleForm>
        </Create>
    )
}




import * as React from 'react';
import { Create, Edit, ReferenceInput, SelectInput, SimpleForm, TextInput } from 'react-admin';
import { useNavigate } from "react-router-dom";
import { UserContext } from '../ProductList/CategoryLayout';
export const MaterialStyleListEdit = (props: any) => {
    const navigate = useNavigate()
    const StyleContext:any=React.useContext(UserContext)
    const onSuccess = (data: any) => {
        navigate(-1)
    };
    return (
        <Edit mutationOptions={{ onSuccess }}
        >
            <SimpleForm>
                <ReferenceInput source="style_id" reference="t_prod_style" >
                    <SelectInput disabled></SelectInput>
                </ReferenceInput>
                <ReferenceInput source="mat_id"  filter={{ mat_type: StyleContext.typeId }} reference="t_base_materiel" >
                <SelectInput></SelectInput>
                </ReferenceInput>
                <TextInput source="count" />
                <TextInput source="description" />
            </SimpleForm>
        </Edit>
    )
}





总结

相关文章
|
1月前
|
机器学习/深度学习 人工智能 前端开发
机器学习PAI常见问题之web ui 项目启动后页面打不开如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
1月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
151 0
|
1月前
|
前端开发 JavaScript 测试技术
从零开始搭建react+typescript+antd+redux+less+vw自适应项目
从零开始搭建react+typescript+antd+redux+less+vw自适应项目
87 0
|
1月前
|
前端开发 API 数据安全/隐私保护
【第45期】一文解决React项目的权限管理
【第45期】一文解决React项目的权限管理
156 0
|
1月前
|
Web App开发 资源调度 JavaScript
竟然可以在一个项目中混用 Vue 和 React?
竟然可以在一个项目中混用 Vue 和 React?
246 0
|
1月前
|
存储 安全 测试技术
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
|
18天前
|
缓存 JavaScript 测试技术
如何创建一个VUE3项目并使用Element UI插件
如何创建一个VUE3项目并使用Element UI插件
|
24天前
IDEA 插件 Material Theme UI收费后 免费的办法
IDEA 插件 Material Theme UI收费后 免费的办法
44 2
|
1月前
|
XML JSON 开发框架
基于 OData 模型和 JSON 模型的 UI5 表格控件行项目的添加和删除实现
基于 OData 模型和 JSON 模型的 UI5 表格控件行项目的添加和删除实现
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!