如何将你的AngularJS1.x应用迁移至React的方法


Posted in Javascript onFebruary 01, 2018

Angular 和 React 都是伟大的框架/库。Angular 提供了 MVC(模型、视图、控制器)的定义结构。React 提供基于状态变化的轻量级呈现机制。通常情况下,开发者在 AngularJS 上有一个旧的应用程序后,他们会想用 ReactJS 建立新的特性。

虽然将 AngularJS 应用移除,从头开始建立一个 ReactJS 应用是不错的选择。但对于大规模应用来说,它不是一个可行的解决方案。在这种情况下,单独建立一个 React 组件并将其导入 Augular 会更容易。

在这篇文章中,我将帮你在 Angular 应用中使用 react2angular 创建一个 React 组件。

目标和计划

这里就是我们将要做的事情 ——

给定: 一个用来展示城市名称和它的著名景点的 Angular 应用。

目标: 给该 Angular 应用添加一个 React 组件。React 的组件将会显示一张特征化的景点照片。

计划: 我们将创建一个 React 组件,通过图片 Url 来传递,并将图像作为一个 React 组件来显示。

让我们开始吧!

第 0 步:拥有一个 Angular 应用

为实现本文的目的,请保持 Angular 应用的简单性。我计划在 2018 年进行欧洲之旅,因此我的 Angular 应用实质上是一个我想访问的目的地清单。

以下是数据集 bucketlist 看起来的样子:

const bucketlist = [{
 city: 'Venice',
 position: 3,
 sites: ['Grand Canal', 'Bridge of Sighs', 'Piazza San Marco'],
 img: 'https://unsplash.com/photos/ryC3SVUeRgY',
}, {
 city: 'Paris',
 position: 2,
 sites: ['Eiffel Tower', 'The Louvre', 'Notre-Dame de Paris'],
 img: 'https://unsplash.com/photos/R5scocnOOdM',
}, {
 city: 'Santorini',
 position: 1,
 sites: ['Imerovigli', 'Akrotiri', 'Santorini Arts Factory'],
 img: 'https://unsplash.com/photos/hmXtDtmM5r0',
}];

这是 angularComponent.js 的样子:

function AngularComponentCtrl() {
 var ctrl = this;
 ctrl.bucketlist = bucketlist; 
};
angular.module('demoApp').component('angularComponent', {
 templateUrl: 'angularComponent.html',
 controller: AngularComponentCtrl
});

这是 angularComponent.html:

<div ng-repeat="item in $ctrl.bucketlist" ng-sort="item.position">
 <h2>{{item.city}}</h2>
 <p> I want to see <span ng-repeat="sight in item.sights">{{sight}}         </p></span>
</div>

超简单! 现在可以去圣托里尼了...

第1步:安装依赖关系

如果你的编辑器没有配置,那么从 Angular 迁移到 React 可能会很痛苦。我们将首先安装 linting 。

npm install --save eslint babel-eslint

接下来,安装 react2angular 。如果你从未安装过 React ,你还将需要安装 react,react-dom 和 prop-types 。

npm install --save react2angular react react-dom prop-types

第2步:创建一个 React 组件

现在,我们已经有了一个 Angular 组件用来呈现城市的名称。接下来,我们需要渲染特色图像。假设这个图片是通过 props 提供给我们的。我们的 React 组件如下所示:

import {Component} from 'react';
class RenderImage extends Component {
 render() {
  const imageUrl = this.props.imageUrl;
  return (
   <div>
    <img src={imageUrl} alt=""/>
   </div>
   );
 }
}

第3步:传递 props 属性

请记住,在第2步中,假设有一个通过 props 获取的可用图像。我们现在要填充 props 值。你可以使用 props 将依赖关系传递给 React 组件。请务必注意,React 组件没有任何 Angular 依赖关系可用。 你可以这样想 -  React 组件就像一个连接到 Angular 应用的容器。 如果你需要容器继承父母的信息,你将需要通过 props 明确地接入。

所以,为了传递依赖关系,我们将在 Angular 中添加一个 renderImage 组件 ,并将其作为参数传递给 imageUrl :

angular.module('demoApp', [])
.component('renderImage', react2angular(RenderImage,['imageUrl']));

第4步:导入 Angular 模板

现在,你可以像任何其他组件一样简单地将这个组件导入到 Angular 应用中:

<div ng-repeat="item in $ctrl.bucketlist">
 <h2>{{item.city}}</h2>
 <p> I want to see <span ng-repeat="site in item.sites">{{site}}</span>
 <render-image image-url={{item.img}}></render-image>
</div>

Ta Da! 不敢相信,这简直就是魔法。当然,这(更多的)是艰苦的工作和汗水,还有陪伴我们的咖啡,等等。

现在就去构建一些 React 组件吧,勇士!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript实现的仿Flash广告图片轮换效果
Apr 24 Javascript
从sohu弄下来的flash中展示图片的代码
Apr 27 Javascript
取选中的radio的值
Jan 11 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
微信小程序选择图片控件
Jan 19 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 #Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 #Javascript
深入剖析Express cookie-parser中间件实现示例
Feb 01 #Javascript
JS 实现百度搜索功能
Feb 01 #Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 #Javascript
微信小程序日期时间选择器使用方法
Feb 01 #Javascript
NW.js 简介与使用方法
Feb 01 #Javascript
You might like
php allow_url_include的应用和解释
2010/04/22 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
异步加载script的代码
2011/01/12 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
外语系毕业生找工作的求职信
2013/11/28 职场文书
实习自我鉴定
2013/12/15 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
会计岗位职责范本
2014/03/07 职场文书
教师师德考核自我评价
2014/09/13 职场文书
2014年材料员工作总结
2014/11/19 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
导游词之山东八大关
2019/12/18 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS