描述:不同的请求接口,不同的code权限码,不能的type类型,相同的处理逻辑,后端配合几个接口数据返回格式名称一致
解决:采用配置项的形式,写一套逻辑代码,简化代码
getSelectData = () => { const selectDataArr = [ { service:aService.A, authCode:auth.a, type:'a', }, { service:bService.B, authCode:auth.b, type:'b', }, { service:cService.C, authCode:auth.c, type:'c', }, ]; selectDataArr.map(item => { item.service( // 传参 { status:item.type='a'?'a':'', authCode:item.authCode } ).then(res => { if(res.items){ // 获取后台数据后的处理,这里要求后台几个接口返回数据格式名称一致 this.setState({ [item.type]:res.items || []; }) } }).catch(err => { // 捕获错误处理 }) }) }
描述:过滤掉数组中为null元素,防止占位符:
解决:filter, 不会改变原始数组,返回新数组
arr = arr.filter(item => item !== null )
描述:同一个按钮,不同角色登录点击时处理不同情况,如门店a登录点击按钮导出a流水数据,门店b登录点击导出b营业数据
解决:当前页面url可以获取角色或者登录返回获取角色,根据角色判断查询的接口及传参处理,统一接口调用及返回处理
handleCommon = () => { const { location } = this.props.history; const currentUrl = location.pathname; const isA = currentUrl == 'aaa'; const isB = currrentUrl == 'bb'; const params; if(){} // 条件判断拦截 if(isA){ // params、fileNameExport、 serviceCommon处理 } else if(isB){ // params、fileNameExport、 serviceCommon处理 }else{ // params、 serviceCommon处理 } serviceCommon({ ...params}).then(res => { const content = res; // 返回的内容 const fileName = fileNameExport; // 下载文件名 this.download(content, fileName); }); } // 处理下载流 download = (content, fileName) => { const blob = new Blob([content]); // 创建一个类文件对象:Blob对象表示一个不可变的、原始数据的类文件对象 const url = window.URL.createObjectURL(blob); // URL.createObjectURL(object)表示生成一个File对象或Blob对象 const dom = document.createElement('a'); // 设置一个隐藏的a标签,href为输出流,设置download dom.style.display = 'none'; dom.href = url; dom.setAttribute('download', fileName); // 指示浏览器下载url,而不是导航到它;因此将提示用户将其保存为本地文件 document.body.appendChild(dom); dom.click(); };
描述:共用组件页面,有些元素根据条件存在,根据条件代表不同的数据
解决:元素权限,绑定后端权限码前端自动显示隐藏或者根据角色前端控制显示隐藏,控制不同的含义