如何將你的AngularJS1.x應用遷移至React的方法
Angular 和 React 都是偉大的框架/庫。Angular 提供了 MVC(模型、視圖、控制器)的定義結(jié)構。React 提供基于狀態(tài)變化的輕量級呈現(xiàn)機制。通常情況下,開發(fā)者在 AngularJS 上有一個舊的應用程序后,他們會想用 ReactJS 建立新的特性。
雖然將 AngularJS 應用移除,從頭開始建立一個 ReactJS 應用是不錯的選擇。但對于大規(guī)模應用來說,它不是一個可行的解決方案。在這種情況下,單獨建立一個 React 組件并將其導入 Augular 會更容易。
在這篇文章中,我將幫你在 Angular 應用中使用 react2angular 創(chuàng)建一個 React 組件。
目標和計劃
這里就是我們將要做的事情 ——
給定: 一個用來展示城市名稱和它的著名景點的 Angular 應用。
目標: 給該 Angular 應用添加一個 React 組件。React 的組件將會顯示一張?zhí)卣骰木包c照片。
計劃: 我們將創(chuàng)建一個 React 組件,通過圖片 Url 來傳遞,并將圖像作為一個 React 組件來顯示。
讓我們開始吧!
第 0 步:擁有一個 Angular 應用
為實現(xiàn)本文的目的,請保持 Angular 應用的簡單性。我計劃在 2018 年進行歐洲之旅,因此我的 Angular 應用實質(zhì)上是一個我想訪問的目的地清單。
以下是數(shù)據(jù)集 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>
超簡單! 現(xiàn)在可以去圣托里尼了...
第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步:創(chuàng)建一個 React 組件
現(xiàn)在,我們已經(jīng)有了一個 Angular 組件用來呈現(xiàn)城市的名稱。接下來,我們需要渲染特色圖像。假設這個圖片是通過 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 獲取的可用圖像。我們現(xiàn)在要填充 props 值。你可以使用 props 將依賴關系傳遞給 React 組件。請務必注意,React 組件沒有任何 Angular 依賴關系可用。 你可以這樣想 - React 組件就像一個連接到 Angular 應用的容器。 如果你需要容器繼承父母的信息,你將需要通過 props 明確地接入。
所以,為了傳遞依賴關系,我們將在 Angular 中添加一個 renderImage 組件 ,并將其作為參數(shù)傳遞給 imageUrl :
angular.module('demoApp', [])
.component('renderImage', react2angular(RenderImage,['imageUrl']));
第4步:導入 Angular 模板
現(xiàn)在,你可以像任何其他組件一樣簡單地將這個組件導入到 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! 不敢相信,這簡直就是魔法。當然,這(更多的)是艱苦的工作和汗水,還有陪伴我們的咖啡,等等。
現(xiàn)在就去構建一些 React 組件吧,勇士!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
react搭建環(huán)境時執(zhí)行npm start報錯start: 'react-scripts&
這篇文章主要介紹了react搭建環(huán)境時執(zhí)行npm start報錯start: 'react-scripts start'的解決方案,具有很好的參考價值,希望杜對大家有所幫助,2023-10-10
react開發(fā)中如何使用require.ensure加載es6風格的組件
本篇文章主要介紹了react開發(fā)中如何使用require.ensure加載es6風格的組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
使用react-native-doc-viewer實現(xiàn)文檔預覽
這篇文章主要介紹了使用react-native-doc-viewer實現(xiàn)文檔預覽,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
React?中?memo?useMemo?useCallback?到底該怎么用
在React函數(shù)組件中,當組件中的props發(fā)生變化時,默認情況下整個組件都會重新渲染。換句話說,如果組件中的任何值更新,整個組件將重新渲染,包括沒有更改values/props的函數(shù)/組件。在react中,我們可以通過memo,useMemo以及useCallback來防止子組件的rerender2022-10-10
如何使用 React Router v6 在 React 中
面包屑在網(wǎng)頁開發(fā)中的角色不可忽視,它們?yōu)橛脩籼峁┝艘环N跟蹤其在網(wǎng)頁中當前位置的方法,并有助于網(wǎng)頁導航,本文介紹了如何使用react-router v6和bootstrap在react中實現(xiàn)面包屑,感興趣的朋友一起看看吧2024-09-09

