京东java前后端联调_前端工程化、组件化实践JDM分享

前端技术原创文

前端工程化、组件化实践JDM分享

该文由孵化创新一部曾瑞文在研究院技术分享会的分享内容总结而成,主要讲解了团队创新的前端工程化、组件化的思想及实践应用。

为什么要搞前端框架?

Java有maven,我们没有!

Java有spring,我们没有,哭!

Java有import,我们又没有,再哭!

目前前端工程化、组件化迫切需求

前端开发需要什么

工程化

Ø依赖管理

Ø包管理

Ø开发环境

Ø多终端调试工具

ØMock Server

Ø打包压缩

基础功能

Ø组件化、嵌套、组件通信

ØSPA渲染方案

Ø前端路由

Ø数据流向控制

Ø前端数据集合操作工具库

JDM实现

包管理工具

cc824c07d0b1405943e5ba2f3fb9db83.png

5c642260369410c5a4fec7414a3024b4.png

每个包都有一个package.json配置依赖,

npm把整个工程的包依赖管理起来

使用Node.js包管理工具npm

Node.js包管理工具npm,如果将来使用Node.js作为服务端语言,

前后端统一使用npm将使项目更加统一

如果将来使用Node.js作为服务端语言,前后端统一使用npm将使项目更加统一。

一行$ npminstall构建你的工程

9bb3ab31c5bd0db7a5958ebfd4b79b43.png

d2e8a4cab6cf93ac784293974bf0ce0d.png

构建后包依赖明确切条理清晰

ES5对比ES6ES5实现

varReact= require('react');varHelloWorldComponent=React.createClass({displayName:'HelloWorldComponent',render:function() {return(

Hello world
);

}

});

module.exports=HelloWorldComponent;

ES6实现

importReact from'react';classHelloWorldComponentextendsReact.Component{constructor() {super();this.state= {};

}render() {return(

Hello World
);

}

}export defaultHelloWorldComponent;

ES6资源依赖

fdd912de0e5dc414f759f111c61e5720.png

除了JS按依赖加载,CSS甚至Image都是按依赖加载到页面中

babel自动将ES6代码转换到ES5运行在浏览器中

打包压缩

20c1f154a62f3d0042ad1214960f408d.png

Øwebpack模块来源广泛,支持包括npm/bower等等的各种主流模块安装/依赖解决方案

Ø支持CommonJS的AMD、CMD

Ø除了JS、CSS,Image都可以用require()方法引入

Ø对于Image可以根据大小转换成Base64编码,强悍

Ø打包压缩混淆都有相应的插件支持,React-hot-loader插件

ØBabel插件ES6编码ES5运行

Øwebpack更注重代码的依赖,打包,RequireJS注重浏览器加载依赖

webpack图片base64

{test:/\.png/,

loader:'url-loader?limit=10000&mimetype=image/png'}

555e00c4c36a78a4981e6ffa7d820528.png

对于Image可以根据大小转换成Base64

多终端调试工具

ee9111ba409c130110c72525a3fa200c.png

ØBrowsersync能让浏览器实时、快速响应您的文件更改(html、js、css、sass、less等)并自动刷新页面

Ø可同时在PC,平板,手机设备上进行调试

Ø交互同步:类似chrome的inspect在一个浏览器中滚动页面同时滚动所有设备

Øurl历史管理

0bae5d4295e9c4505f432f2101bda5da.png

Browsersync演示

a86b0a32a0a107f9ec10a3c6d26035f2.png

Mock Server(前后端联调利器)

d97dbecf8ca7341adf13d4f6a0e4ba24.png

Ø模拟服务器

Ø使用Node.js的Express中间件编写

Ø作为web服务器在前端开发的一个虚拟环境

Ø服务端给一个假数据,我们在mockserver中粘贴,该JSON数据,即可提供一个http的接口。

Ø返回数据每个字段可以选择模拟处理方式,比如字段是一个时间戳生成的唯一ID,又如字段需要字符串处理,给出处理规则就,可以返回加工后的数据

组件化

9617af7d8bd5c317632b0e351916822f.png

《六神合体》每个机器人分开与组合后完美运行

Ø组件是天然模块

Ø高内聚

Ø可复用

Ø可互换

Ø可组合

组件目录结构

aadf76115dabb41674c7dfef4f69ed0f.png

c5d20fe2c399dd64739f58370bd75b2f.png

组件化一嵌套

d6d5302116872da45095ffbb3c95e731.png

实际需求分析、抽象、规划组件嵌套的数据流向

组件化—嵌套抽象

e02a5de095460c0a624505eba3fe739e.png

页面组件抽象后的组件嵌套关系

组件化—嵌套—数据流向设计

9a5794e94546062e6771d9185e4b7ee2.png

组件嵌套数据流向设计

组件化--嵌套--数据流向控制流

d6eac6cb37b90c111f14d3b1417f2288.png

组件数据单向流动:父子通信靠props,尊重HTML的同时保证数据流向明确

回调函数一样要通过props流入子组件

同级组件通信通过父节点做转接。数据流向依然统一,且低耦合

JSX

结构逻辑混合

React将模板内嵌到逻辑内部,实现了一个JS代码和HTML混合的JSX。

JS操作结构

通过JS方便、直观的操控组件结构,比如我想给组件增加几个节点:

varCustomComponent= React.createClass({render:function() {var$nodes= ['h','e','l','l','o'].map(function(str) {return({str});

});return({$nodes}

);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值