如何将你的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 相关文章推荐
jQuery 性能优化指南(3)
May 21 Javascript
从盛大通行证上摘下来的身份证验证js代码
Jan 11 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
JavaScript 基础篇(一)
Mar 30 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
Jun 19 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
echarts实现折线图的拖拽效果
Dec 19 Javascript
react 原生实现头像滚动播放的示例
Apr 21 Javascript
js实现星星海特效的示例
Sep 28 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
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使用function_exists判断函数可用的方法
2014/11/19 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
Laravel下生成验证码的类
2017/11/15 PHP
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python实现两款计算器功能示例
2017/12/19 Python
python实现决策树分类算法
2017/12/21 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
python 画函数曲线示例
2019/12/04 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
应聘英语教师求职信
2014/04/24 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS