1.React + typescript + antd开发前端应用(八)使用全局状态
2.reactadmin?
3.实例-0antd design pro V5 [3] 个性化调整&路由相关
4.饿了么UI的源码el-menu导航报错Missing required prop: "index"
React + typescript + antd开发前端应用(八)使用全局状态
上一篇文章:React + typescript + antd开发前端应用(七)添加菜单点击功能
在处理需要跨多个组件频繁访问的状态时,如果通过在父组件定义状态并通过属性传递给子组件的源码方式来进行访问,当组件层级较深时,源码这种方法将变得非常麻烦。源码同时,源码从菜单添加点击事件的源码牛年祝福源码角度来看,将更新状态的源码函数传递到子组件和行为组件中的方式并不合理,这给代码的源码可读性带来了困扰,并且在不同组件间传递的源码参数较多,容易产生错误。源码在后续的源码代码编写中,应根据实际情况,源码不必过分追求UI组件和行为组件的源码完全分离。
1、源码创建AppContext及AppContextProvider
分析之前的源码代码,tabs组件需要两个状态:一个是记录当前激活的标签页的key,另一个是tabs页签项的数组对象。这两个状态可能在AppTabs组件和AppMenu中需要访问,因此需要创建一个全局对象来保存这两类数据。在src\context目录下创建AppContextProvider.tsx文件,并编辑其内容如下:
2、修改index.tsx
使用刚刚创建的AppContextProvider包裹AppLayout组件,以便在AppLayout及其子组件中使用全局状态对象及函数:
3、修改src\layout\AppLayoutFuncs.ts文件
该文件移除了行为函数,否则状态数据、更新状态的函数都需要作为参数传递到函数中,这会降低代码的可读性:
4、修改src\layout\AppLayout.tsx文件
使用AppContext,添加行为函数:
5、修改src\layout\AppTabsFuncs.ts文件
删除行为函数:
6、修改src\layout\AppTabs.tsx文件
使用全局状态:
7、zookeeper源码分析修改src\layout\AppMenuFuncs.ts文件
8、修改src\layout\AppMenu.tsx文件
完成代码重构后,回到浏览器中进行测试,以验证全局状态是否能够正常工作。
依然建议读者亲自编写这些代码,而不是简单地复制粘贴。在编写代码的过程中,理解每一行代码的意义,这对熟悉React和typescript都有很大帮助。
reactadmin?
开箱即用的React前端框架——ReactAdmin
ReactAdmin是一个Github上免费开源的前端框架(不是组件库,也不是模板,它是一个框架),采用es6、React和MaterialDesign构建基于Rest/GraphQlAPI的Web应用程序。在React上star数超过8k。
ReactAdmin不是个UI组件库,它是一个前端框架,因此你基本上基本上只要按照官网的文档进行一些配置等然后在其基础上开发自己的应用程序即可,可谓开箱即用,意识就是都给你集成好了。
你可以直接使用以下命令进行安装(这是安装react-admin及所有的依赖)
下面我们看一下官网提供的一个最简单的示例,你可以在它的主仓库中获取
我们进入到simple中,大致看一下代码和目录结构
我们安装一些依赖然后启动
成功后打开浏览器,这是使用react-admin最简单的一个例子
一图了解
由于ReactAdmin是一个非常复杂的框架,你可以参考提供的文档,我这里就不详细介绍了,感兴趣的可以直接看文档,文档是英文的,所有的说明都在文档中。
ReactAdmin它是网站目录源码一个集合,它将一些前端开发所需要的东西都集成了进来,然后做好,我们直接使用即可,不仅仅适合个人学习,也适合通过它来构建企业级的应用。我们不仅仅是拿过来直接用,我们可看一看别人是怎么实现这样的一个框架的,从源码去学习会更快的提升自己的水平,希望对你有所帮助!
react-admin一款基于reactjs后台解决方案
使用ES6,React和MaterialDesign在REST/GraphQLAPI之上构建在浏览器中运行的管理应用程序的一款前端框架。Githubstar8.7K+,MIT协议。由marmelab开源和维护。marmelab还有一款非常热门的angularjs后台解决方案ng-admin基于angularjs感兴趣的同学可以去了解下。react-admin官网示例截图如下:
该Resource组件是一个配置组件,它允许以限定子组件对于每个管理视图的:list,edit,和create。这些组件使用MaterialUI和react-admin中的自定义组件:
antdesign表格标题下面还有子标题一、如图展示表格如何展示下方嵌套的deptName
在这里插入描述
官网在这里插入描述
二、解决方案
Columnalign="center"title="部门"dataIndex={ ["dept","deptName"]}/
1
1
技术交流分享/面试总结
微信名片
打开CSDNAPP,看更多技术内容
最新发布保姆级教程:AntDesignVue中a-table嵌套子表格
AntDesignVue中a-table嵌套子表格及只打开一个嵌套表格的方法
继续访问
Antd(Ant-design),嵌套子表格(expandedRowRender)的异步获取数据
使用阿里的ant-design开源框架,要在表格里面嵌套子表格,需要在用户点击父表格的一行数据后,获取该行的key,然后去异步请求后台的数据用来填充子表格的内容。如果这样写(省略无关代码):expandedRowRender=(record)={ dispatch({ type:'flow/getPlanList',payload:{ contractId:record.contract_id,//该参数...
继续访问
react-antdesigntable表格多级可编辑表格
antd-react3X版本多级可编辑table
继续访问
react.jsant-design中table树结构三级嵌套时逻辑问题
实现三级嵌套树结构时,勾选三级里的游戏发布源码子节点时候父节点也会自动勾选,当子节点大于一项时候取消勾选某一子结构时父节点不变;当子节点只有一项时父节点也会自动取消勾选importStandardTablePagefrom'@/components/StandardTablePage';//用户选中某一行userSelect(record,selected,selectedRows,nativeEvent){ let{ selectedRowKeys}=this.st.
继续访问
Reactantd的table表格之嵌套表格
Reactantd的table表格之嵌套表格最近做了几个pc端的后台管理需求,涉及了table中的嵌套表格,嵌套的子表格大体分为两种效果:效果1-----点击展开新的子表格,旧的子表格关闭效果2-----可同时展开多个子表格效果1:嵌套表格,实现点击展开按钮,展开子表格请求接口数据,点击新的子表格收起原来的子表格效果//设置一个State用来储存展开的行,控制属性const[expandedRowKeys,setExpandedRowKeys]=useStateanygt
继续访问
vue嵌套表格组件_支持嵌套对象、多级数组的Vue动态多级表单组件——vue-dynamic-form-component...
方便不想看完全篇文章的童鞋,简单总结一下,这是篇软广,主要是推广自己在业务中沉淀的一个开源组件vue-dynamic-form-component。基于element-ui实现的vue组件,只需编写类似async-validator的规则,自动生成对应的表单,支持常见输入类型的同时,支持嵌套对象、hashmap、多维数组等复杂类型。有需要的童鞋欢迎使用和贡献代码,顺便给个star(我...
继续访问
antdtable嵌套子表格后端动态获取数据rudex写法示例
有一个需求是可以使主表格里每一栏数据展开,在子table里显示与其相关的子数据项,展开的时候去向后台请求数据显示。用的组件库是Antd。首先我们看Antd官方文档的Table有嵌套子表格的功能,可见我们需要使用expandedRowRender参数,但是尝试在expandedRowRender函数中进行请求,会发现发出了连续的请求,所以我们把请求写在onExpand中,只在点击展开图表的内存修改源码时候发出一次。之后我们写onExpand函数,注意这里的参数要写上expanded,代表是展开还是合并,我之前
继续访问
React-Antd-表格-嵌套子表格
文档地址:链接.import{ Table,Badge,Menu,Dropdown,Space}from"antd";import{ DownOutlined}from"@ant-design/icons";import{ useEffect,useState}from"react";exportdefaultfunctionApp(){ constcolumns=[//定义外层表格头数据{ title:"姓名",dataInde
继续访问
ReactantdTable实现单元格点击表头斜线分组等功能
reactantd单元格添加点击事件自定义单元格
继续访问
进阶Ant-Design-Vue你知道table多级表头嵌套展开写法吗?
前言:在Ant-Design-Vue的前端项目中,我们会经常处理表格,表单这些组件元素,熟练运用并知道它们在使用过程中的联系与区别,这是一个前端必不可少的哟。本文我旨在解决两个问题:(1)如何便于更好的嵌套多级表头(2)如何通过a-checkbox控制全选,单选显示a-table对应的列元素类似于ElementUI,Ant-Design-vue中有很多相似点,但又不完全苟同,有很多自己独有的写法和思想。相信很多人都是先入手ElementUI,再入手Ant,这其实是对开发者比较友好的方式,如果
继续访问
前端面试题(react)
性能优化分为2个方面setState是修改其中的部分状态,相当于Object.assign,只是覆盖,不会减少原来的状态;replaceState是完全替换原来的状态,相当于赋值,将原来的state替换为另一个对象,如果新状态属性减少,那么state中就没有这个状态了接收旧的state和action,返回新的state受控组件就是可以被react状态控制的组件在react中,Inputtextarea等组件默认是非受控组件(输入框内部的值是用户控制,和React无关)
继续访问
Antd表格设置表头分组实现可编辑行
主要通过onCell方法修改children中cloumn的属性。
继续访问
antd能自适应吗_admin-antd-react是一个后台前端解决方案,它基于React、AntDesign和UmiJs实现。...
admin-antd-react是一个后台前端解决方案,它基于React、AntDesign和UmiJs实现。--::?阅读次#介绍[admin-antd-react]()是一个后台前端解决方案,它基于[React](...
继续访问
react-antd-Table相似表格不同字段处理
1、当两个表格字段相似时,但有一两个字段不同,我们可以将不同的字段单独以对象的形式抽出,根据情况push进去即可。2、代码参考constchange={ title:'操作',dataIndex:'operate',key:'operate',width:'%',align:'center',render:(text,record)={
继续访问
React中控制AntDesignTable列的显示与隐藏
React中控制AntDesignTable列的显示与隐藏
继续访问
热门推荐使用antd中Table组件某一列有多个变量值需要写入
当某一列需要有多个变量值写入时,我们就不可以再用dataIndex来定义一个ID,具体解决方案将在文中给出。
继续访问
reactant-designtable显示数据以及上传数据显示到另一列中
需求是:用table展示数据,并在每一行的最后一列中给一个上传附件的按钮,可上传多个附件,上传之后在另一列去显示数据,可以删除附件因为有别的组件用到columns,他不需要上传附件功能,我就把columns的公共部分提出去了,在这个组件需要的时候在push到column中。columns如下:/***处理上传附件列*/handleColumn=()={ letcArr=this.state.columns;
继续访问
antd表单一个label下多个内容
1.如何实现一个label旁并排多项内容比如这样,在other的label下,既有输入文本域,又有toggle开关。同时两者有序地并排在右侧,同一行。方法是再用一层Form.Item分别包裹右侧内容,并且设置noStyle属性示例代码:Form.Itemlabel="DateofBirth:"Form.Itemname="birthDate"noStyle
继续访问
React针对antDesignselect组件进行二次封装
React针对antDesign库select组件进行二次封装由于业务需要对select进行样式上的修改,部分select还需要使用原样式。这种情况可以通过两种方式来实现:1通过className进行样式覆盖2通过二次封装组件,相对于仅修改css样式来说更加的灵活本次介绍第二种方式对组件进行二次封装/**@Date/5/8*@Authorzuolinya*@Descriptionantdselect组件二次封装*1设置为圆角*/import
继续访问
React基于AntdDesign的RadioGroup按钮组控件封装
开源Vue后端UI开箱即用解决方案——vuestic-admin这是一个Vue的后端开箱即用UI项目框架,和之前的ReactAdmin类似,它是一个框架,也就意味着它帮你完成了很多公用的部分,你只需要在其基础上进行自己的项目扩展即可。大体上这是由Vue和bootstrap4构建的,其中还集成了很多其他的东西。
如果你使用yarn你也可以使用它安装
在安装好vuestic后,你就可以使用它进行项目创建了
创建好后大致看一下目录结构(可能不清晰,你可以直接搭建体验)
成功后打开localhost:
如果你想详细的学习,你可以查看官网文档
浏览器兼容性,很遗憾只支持到IE+和主流的Chrome、FireFox、Safari、Edge等
目前有很多开箱即用的解决方案,还有一些仅仅是UI模板,每个解决方案都有各自的优势,我们尽可能的减少不必要的开发时间浪费,在通用的基础上在扩展,最主要的还是学习看源码,希望对大家有所帮助,谢谢!
react中实现登录鉴权vue中会使用导航守卫判断token,
react中使用redirect方式
使用高阶组件定义PrivateRoute导出
在router中用
PrivateRoute?path="/admin/roles"?exact?component={ Roles}/PrivateRoute的方式判断需要token的路由
import?React,?{ ?Component?}?from?'react'
import?{ Redirect,?Route}?from?'react-router-dom'
function?PrivateRoute({ ?component:Children,?...rest?})?{
return?(
Route{ ...rest}
render={ ()?={
let?token?=?localStorage.getItem('token')if(token){
return?Children/
}else{
returnRedirect
to={
'/login'
}/
}
}
}
/);
}export?default?PrivateRoute实例-0antd design pro V5 [3] 个性化调整&路由相关
在Antd Design Pro V5中,个性化调整和路由管理是关键环节。首先,我们可以通过修改config/defaultSettings.ts文件来实现标题的自定义。
加载页的添加虽然未提及操作步骤,但这是配置流程的一部分。创建新页面时,简单地创建内容并在config/routes.ts中添加JSON节点,即可在系统中看到新页面的显示效果。
菜单的国际化配置在src/locales/zh-CN/menu.ts中实现,只需添加对应键值对,如'menu.myPage': '我的页面',这样菜单名称会根据配置动态加载。嵌套路由的name会在添加时自动拼接父路由名。
为了实现多级菜单和包裹功能,需参考管理页面的配置示例,为路由添加子路由数组,父节点无需组件时,它将作为二级菜单显示,而配置的组件则可以包裹子路由内容。
关于路由组件的props,Umi 4的升级导致props默认为空,需通过hooks获取所需参数,避免直接从props中获取属性值。
Layout布局方面,umi3和umi4有所变化,都采用hooks获取参数,不再直接依赖路由组件的props。路径定义在项目的jsconfig.json中,使用@符号表示src目录。
在布局调整部分,理解app.tsx的层级结构和proLayout配置有助于实现布局调整,特别是处理页面和布局组件的嵌套关系。
默认页的和状态可以通过修改config/defaultSetting.ts中layout的值来调整。混合模式下,需注意splitMenus属性和一级菜单父路由的默认节点设置。
最后,关于权限管理,umi提供了一系列插件,如@umijs/plugin-access,用于定义和控制用户的权限。在src/access.ts中定义用户权限,通过access属性在routes.ts中添加权限条件,实现路由权限控制和页面权限显示。
饿了么UI的el-menu导航报错Missing required prop: "index"
UI框架在企业开发项目中应用广泛,其中elementUI、IView、AntD是最常见的三个。每个框架在使用过程中都可能出现所谓的“坑”,即官方文档描述不全面导致用户在实际使用中遇到的问题。这些“坑”往往源于官方文档语言过于专业,用户在阅读时可能忽视了一些细节。
“踩坑”是学习过程中的宝贵经验。为便于理解,现将关键代码展示如下。以最终效果为例,导航栏有三个部分:一是“什么是外卖”,仅包含一级导航;二是“吃外卖的好处”,包含一级导航和二级导航;三是“吃外卖的坏处”,同样包含一级导航和二级导航。
开始修改官方代码进行实践。首先,将代码粘贴到开发环境。最终效果展示如下:
解说:导航栏分为三个部分。第一部分:“什么是外卖”,只有一个一级导航;第二部分:“吃外卖的好处”,包含一级导航和二级导航;第三部分:“吃外卖的坏处”,同样包含一级导航和二级导航。
在实施步骤一的过程中,复制官方代码并进行修改。为了展示代码,我们附上代码图示和代码片段。
在“踩坑”过程中,发现第一个问题:当使用el-submenu时,如果未添加“index”属性,会出现报错“Missing required prop: 'index'”。这是因为“index”属性在组件初始化时必须提供,且在组件内部的逻辑中,如@select事件中,会使用到这个属性。
第二个问题出现在点击一级菜单时,其他已经展开的菜单并未自动收起。为解决此问题,应利用组件提供的“@select”事件,代码如下,并附带打印“select”回调函数接收的参数。
至此,通过实践与总结,我们解决了使用elementUI过程中遇到的两个问题,即el-submenu的“index”属性必须添加,以及点击一级菜单时自动收起其他展开菜单的问题。通过不断尝试和学习,我们能够更好地掌握并应用UI框架。