dva

「前端工程化」该怎么理解?

自作多情 提交于 2021-02-09 13:40:10
关注「 前端向后 」微信公众号,你将收获一系列「用 心 原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术 一.什么是前端工程? 一个类似的术语是软件工程(Software Engineering): Software engineering is the systematic application of engineering approaches to the development of software. 将工程方法系统化地应用到软件开发中,就叫软件工程 。那么,紧接着又有两个问题: 工程方法是什么? 系统化怎么理解? 工程是指使用科学原理设计和制造机器、结构等,比如修桥、铺路、建隧道、造车、盖房子: Engineering is the use of scientific principles to design and build machines, structures, and other items, including bridges, tunnels, roads, vehicles, and buildings. 具体到软件领域,指的是 以系统、严谨、可量化的方法开发、运营、维护软件 ,软件工程包括对这些方法的应用和研究: Software engineering the application of a systematic,

antd pro 新增模块的步骤

杀马特。学长 韩版系。学妹 提交于 2021-02-02 06:57:21
index.js是整个项目的入口文件。 // 1. Initialize const app = dva({ history: createHistory(), }); // 2. Plugins app.use(createLoading()); // 3. Register global model app.model(require('./models/global').default); // 4. Router app.router(require('./router').default); // 5. Start app.start('#root'); export default app._store; // eslint-disable-line 找到/src/common/menu.js中进行菜单配置, 在/src/common/router.js的routerConfig中配置路由,其中第一个参数是一个DvaInstance的实例,是index.js文件中定义的;第二个参数是该页面对应的model,即数据存储的地方;第三个参数是一个函数,返回对应的页面。 '/': { component: dynamicWrapper(app, ['user', 'login'], () => import('../layouts/BasicLayout')), },

初学DvaJS,掌握核心概念后原来如此简单

我怕爱的太早我们不能终老 提交于 2020-08-16 03:18:40
​ dva是什么 dva 首先是一个基于 redux和 redux-saga的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router和 fetch,所以也可以理解为一个轻量级的应用框架。 dva 是基于现有应用架构 (redux + react-router + redux-saga 等)的一层轻量封装。dva 是 react 和 redux 的最佳实践。最核心的是提供了 app.model 方法,用于把 reducer, initialState, action, saga 封装到一起。 特性 易学易用,仅有 6 个 api,对 redux 用户尤其友好,配合 umi 使用更是降低为 0 API elm 概念,通过 reducers, effects 和 subscriptions 组织 model 插件机制,比如 dva-loading可以自动处理 loading 状态,不用一遍遍地写 showLoading 和 hideLoading 支持 HMR,基于 babel-plugin-dva-hmr实现 components、routes 和 models 的 HMR 安装 创建一个dva项目很简单,dva为我们提供了dva-cli,用来快速创建dva项目。 通过 npm 安装 dva-cli 并确保版本是 0.9.1 或以上。 $ npm

react使用fetch封装请求的方法-简单易懂

╄→尐↘猪︶ㄣ 提交于 2020-08-14 23:01:46
方法有很多种,这里贴一个比较优雅又简单易懂的。用class类写法,new一个实例方法。 其中qs是包,类似于url拼接的方法,自行npm安装。我这里fetch使用的是dva的fetch,也可以自行使用自带的fetch , 把 const fetch = require('dva').fetch; 注释既可。 /** * 请求方法 */ import qs from 'qs'; import { message } from 'antd'; const fetch = require('dva').fetch; const { stringify, parse } = qs; const checkStatus = res => { if (200 >= res.status < 300) { return res; } message.error(`网络请求失败,${res.status}`); const error = new Error(res.statusText); error.response = response; throw error; }; /** * 捕获成功登录过期状态码等 * @param res * @returns {*} */ const judgeOkState = async res => { const cloneRes = await res

01 Taro_Mall 开源多端小程序框架设计

久未见 提交于 2020-05-08 03:49:43
项目介绍 Taro_Mall 是一款多端开源在线商城应用程序,后台是基于litemall基础上进行开发,前端采用Taro框架编写,现已全部完成小程序和h5移动端,后续会对APP,淘宝,头条,百度小程序进行适配。Taro_Mall已经完成了 litemall 前端的所有功能 扫码体验 由于小程序没有认证,只发布了一个预览版,只能加15个人,如有需要,请点击小程序申请 <img src='https://gitee.com/qiaojie/taro-mall/raw/master/public/xiaochengxu.jpg' width='150' height='150' style="margin-right: 80px" /><img src='https://gitee.com/qiaojie/taro-mall/raw/master/public/mobile.png' width='150' height='150'/> <span style="margin-right: 200px;margin-left:20px">小程序</span> h5移动端 项目架构 项目用Taro做跨端开发框架,Taro基本采用React的写法,项目集成了 redux dva 控制单向数据流,用immer来提供不可变数据,提升整体的性能,减少渲染。 初始化项目 taro init Taro

东篱下悠然见南山诗人对

天涯浪子 提交于 2020-05-03 14:43:10
sdfsdf 服务网格作为一个改善服务到服务通信的专用基础设施层,是云原生范畴中最热门的话题。随着容器愈加流行,服务拓扑也频繁变动,这就需要更好的网络性能。服务网格能够通过服务发现、路由、负载均衡、心跳检测和支持可观测性,帮助我们管理网络流量。服务网格试图为无规则的复杂的容器问题提供规范化的解决方案 将供应链搬出中国,似乎成了过去两三个月新冠肺炎疫情衍生出的热门话题。 年初新冠肺炎疫情爆发,让中国供应链的生产活动几乎完全停顿,影响席卷全球:苹果的新 5G 有可能因疫情而延期推出,特斯拉新款芯片无法及时交付、陷入“芯片门”纠纷。其余像三星、小米、索尼等著名跨国企业,均受到供应链停摆的影响。 因此,posjjhk.answers.yahoo.com/question/index?qid=20200426185742AARJR5s?BX4=10dva=78o answers.yahoo.com/question/index?qid=20200426185742AARJR5s?OQ6=24lbn=41b nz.answers.yahoo.com/question/index?qid=20200426185742AARJR5s?BR0=68lma=68a in.answers.yahoo.com/question/index?qid=20200426185809AAqC9ve?VS4

Umi+Dva搭建Cesium 3D开发环境

风格不统一 提交于 2020-05-02 00:38:41
umi,中文可发音为乌米,是一个可插拔的企业级 react 应用框架,是蚂蚁金服的底层前端框架,已直接或间接地服务了 600+ 应用,包括 java、node、H5 无线、离线(Hybrid)应用、纯前端 assets 应用、CMS 应用等。(具体可前往Umijs官网进行查看 https://umijs.org/) dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。( https://dvajs.com/guide/) 首先搭建umi+dva前端开发环境: ###第一步:创建一个项目文件夹 ###第二步:使用命令行创建umi应用: yarn create umi 选择->app,按回车进行下一步 选择项目中是否需要使用typescript语言,看个人情况进行选择 ###第三步:选择项目中使用的插件,这里是具体情况而定,本项目选择antd 前端UI框架,dva插件以及code-spliting代码分割插件。注意这是多选,使用空格键进行选择,按回车键进行下一步。 ###第四步:安装项目中所需依赖 yarn install / npm install ###第五步:cesium插件安装。 yarn add cesium / npm

由React引发的前后端分离架构的思考

假装没事ソ 提交于 2020-05-01 23:29:51
摘要 以React技术栈为主分享我们在大规模企业应用建设过程中遇到的问题,对前后端分离架构的思考,前后端分离的技术方案,前后端分离过程中的实践经验,前后端分离带来的效果与价值,以及目前存在的问题与未来可能的尝试。 应用的现状 我们的应用拥有接近100w的用户、3K+的QPS、5亿+的单表数据、万亿级别的资金流,但是同样也面临着诸多问题。 首先是颜值低,换肤受限、无法集成更好的前端框架和组件。然后是前后端的高度耦合使得无法快速的响应业务变化,维护成本也随着应用规模不断攀升,性能方面也受到限制,沟通成本提高。其次是无法跨终端,渲染和跳转强依赖于后端,业务逻辑分散。最后就是强状态性,应用中很多的数据是与用户的会话绑死的,由此造成没有水平伸缩的能力,智能化、自动化、服务化同样受限。 我们经过思考认为理想的状态应该是这样的,前端方面具备高颜值、个性化、多渠道、多终端的特质;而在后端上需要能做到微服务化、水平伸缩、高可用、自动化甚至智能化。 解决方案-前后端分离 定义 在之前的应用中后端是Java,前端是Browser(浏览器)。但是现在Node出现了,它被包含在大前端中用来替换原来的MVC部分,这样后端就可以脱离出来处理纯服务化的部分,前端也可以专注于纯前台的领域。 各自的职责 前端方面Browser负责数据的展现和收集、事件的响应和处理、DOM的操作、请求的发送和响应的处理

React项目开发中的数据管理

我的梦境 提交于 2020-04-26 07:08:10
原文链接:https://blog.csdn.net/hl582567508/article/details/76982756 redux中文文档:http://cn.redux.js.org/ React项目开发中的数据管理   对于React的初学者在项目开发中常常还是会以DOM操作的思维方式去尝试获取、修改和传递数据,但是这种思想,在React思想中显然是错误的,针对这种情况下文将进行一个简易的总结。我们将从基础的纯React组件之间的传值开始论述,然后分析React结合Redux之间的数据传递,以及最后基于dva脚手架的数据传输问题进行探讨和分析。 一、 原生React组件的数据传输管理:   原生React组件之间的数据传输主要依赖于两个关键词:属性(props) 和状态(state)。每一个组件都是一个对象,props是对象的一个属性,组件对象可以通过props进行传递。React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据。state与props的最大区别在于props是不可变的而state是可变的。具体内容后面会详细讲解。 原生React组件之间数据传递场景可以分为以下四种: - 组件内部的数据传输 - “父组件”向“子组件”传值 - “子组件”向 “父组件”传值

#react 之ant design Pro 学习研究#----启动项目

一笑奈何 提交于 2020-04-19 05:23:31
#首页 src/index.js import '@babel/polyfill'; import 'url-polyfill'; import dva from 'dva'; //import createHistory from 'history/createHashHistory'; // user BrowserHistory import createHistory from 'history/createBrowserHistory'; import createLoading from 'dva-loading'; import 'moment/locale/zh-cn'; import './rollbar'; import './index.less'; // 1. Initialize dva初始化 const app = dva({ history: createHistory(), }); // 2. Plugins 加载插件 app.use(createLoading()); // 3. Register global model 注册全集model app.model(require('./models/global').default); // 4. Router 加载路由 app.router(require('./router').default)