国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Vue,Mixins與組件繼承

來源:懂視網 責編:小采 時間:2020-11-27 19:37:35
文檔

Vue,Mixins與組件繼承

Vue,Mixins與組件繼承:這次給大家帶來Vue,Mixins與組件繼承,Vue,Mixins與組件繼承的注意事項有哪些,下面就是實戰案例,一起來看一下。前段時間在工作中寫Hybrid頁面時遇到了這樣的一個場景,公司需要一系列的活動組件,在每個組件注冊的時候都需要調用App端提供的一個接口。
推薦度:
導讀Vue,Mixins與組件繼承:這次給大家帶來Vue,Mixins與組件繼承,Vue,Mixins與組件繼承的注意事項有哪些,下面就是實戰案例,一起來看一下。前段時間在工作中寫Hybrid頁面時遇到了這樣的一個場景,公司需要一系列的活動組件,在每個組件注冊的時候都需要調用App端提供的一個接口。
這次給大家帶來Vue,Mixins與組件繼承,Vue,Mixins與組件繼承的注意事項有哪些,下面就是實戰案例,一起來看一下。

前段時間在工作中寫Hybrid頁面時遇到了這樣的一個場景,公司需要一系列的活動組件,在每個組件注冊的時候都需要調用App端提供的一個接口。一開始也考慮了幾種方式,包括mixin、組件繼承以及react高階組件。但經過了種種衡量,最后選擇使用了高階組件的做法。

那什么是高級組件?首先你得先了解請求ES6中的class只是語法糖,本質還是原型繼承。能夠更好的進行說明,我們將不會修改組件的代碼。而是通過提供一些能夠包裹組件的組件, 并通過一些額外的功能來增強組件。這樣的組件我們稱之為高階組件(Higher-Order Component)。

1、Mixins的缺點

React官方已不推薦使用Mixins的技術來實現代碼的重用,Mixins技術有一系列的缺點,首先Mixins會造成命名沖突,我們通過以下的方式來注入Mixins:

var myMixins = require('myMixins');
var Button = React.createClass({
 mixins: [myMixins],
 
 // ...
})

如果你需要注入多個mixins,其中一個是自己的,另外的可能是第三方的。那有可能在兩個mixins里使用了相同名稱的方法,這會使得其中的一個不起作用,而你能做的只有修改其中一個方法的名稱。另一方面,一個mixins一開始可能是非常簡單的,僅僅需要實現某一個功能,但當業務越加的復雜,需要往其中加入更多的方法的時候,就會變得非常復雜。要深入了解mixins的缺點,可以查看官方博客。

2、組件繼承

對于我自己來說這種方法以前使用的比較多,先創建一個BaseComponent,在其中實現一系列公共的方法,其后的每個組件都繼承于這個組件,但缺點是不夠靈活,在基礎組件中只能實現一些比較固定的方法,而對于每個組件的定制化會有很大的限制。

3、React高階組件

由于mixins的一系列缺點,React官方也意識到使用mixins所帶來的痛點遠遠高于技術本身產生的優點,而高階組件便可以代替mixins,而且當深入之后它還有著更加豐富的用法。

高階組件(HOC)是React中對組件邏輯進行重用的高級技術。但高階組件本身并不是React API。它只是一種模式,這種模式是由React自身的組合性質必然產生的。

高階函數

說到高階組件,就先得說到高階函數了,高階函數是至少滿足下列條件的函數:

1、接受一個或多個函數作為輸入
2、輸出一個函數

在javascript這門函數為一等公民的語言中,高階函數的使用還是非常之多的,像我們平時的回調函數等等,都用到了高階函數的知識。我們先來看一個簡單的高階函數

var fun = function(x, y) {
 return x + y;
}

fun是一個函數,下面我們將整個函數作為參數傳遞給另一個函數

var comp = function(x, y, f) {
 return f(x,y);
}

驗證一下

comp(1,2,fun) // 3

高階組件定義

類比高階函數的定義,高階組件就是接受一個組件作為參數,在函數中對組件做一系列的處理,隨后返回一個新的組件作為返回值。

我們先定義一個高階組件BaseActivity

const BaseActivity = (WrappedComponent) => {
 return class extends Component {
 render() {
 return (
 <section>
 <p>我的包裹組件</p>
 <WrappedComponent />
 </section>
 
 )
 }
 }
}

組件接受一個被包裹的組件作為參數,返回了一個經過處理的匿名組件。

在其他組件中使用這個高階組件

class Example extends React.PureComponent {
 constructor(props) {
 super(props);
 this.state = {
 width: '100%',
 height: '100%'
 }
 }
 componentWillMount() {
 if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
 return;
 } else {
 this.setState({
 width: '375px',
 height: '640px'
 })
 }
 }
 render() {
 let { width, height } = this.state;
 return (
 <p className="activity">
 <p className="activity-content" style={{ width, height }}>
 <button className="btn">參加活動</button>
 </p>
 </p>
 )
 }
}
export default BaseActivity(Example);

具體用法就是在export 組件的時候,使用BaseActivity函數來包裹這個組件,看下輸出的react dom內容

在Example組件外面包裹了一個匿名組件。

參數

既然高階組件是一個函數,我們就可以向里面傳遞我們需要的參數

const BaseActivity = (WrappedComponent, title) => {
 return class extends Component {
 render() {
 return (
 <section>
 <p>{title}</p>
 <WrappedComponent />
 </section>
 
 )
 }
 }
}

在Example中這樣export

export default BaseActivity(Example, '這是高階組件的參數');

我們看下輸出的react dom

可以看到參數已經傳遞進去了。

當然還可以這樣用(柯里化)

const BaseActivity (title) => (WrappedComponent) => {
 return class extends Component {
 render() {
 return (
 <section>
 <p>{title}</p>
 <WrappedComponent />
 </section>
 
 )
 }
 }
}

在Example中這樣export

export default BaseActivity('這是高階組件的參數')(Example);

這種用法在ant-design的表單以及redux的connect中我們都可以看到

// ant
const WrappedDemo = Form.create()(Demo)
// redux
export default connect(mapStateToProps, mapDispatchToProps)(Counter)

高階組件還可以擴展原組件的props屬性,如下所示:

const BaseActivity (title) => (WrappedComponent) => {
 return class extends Component {
 render() {
 const newProps = {
 id: Math.random().toString(8)
 }
 return (
 <section>
 <p>{title}</p>
 <WrappedComponent {...this.props} {...newProps}/>
 </section>
 )
 }
 }
}

看下輸出的react dom

高階組件的缺點

高階組件也有一系列的缺點,首先是被包裹組件的靜態方法會消失,這其實也是很好理解的,我們將組件當做參數傳入函數中,返回的已經不是原來的組件,而是一個新的組件,原來的靜態方法自然就不存在了。如果需要保留,我們可以手動將原組件的方法拷貝給新的組件,或者使用hoist-non-react-statics之類的庫來進行拷貝。

相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

推薦閱讀:

JS做出左右列表平移功能

Vue的UI組件庫自定義動態組件

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Vue,Mixins與組件繼承

Vue,Mixins與組件繼承:這次給大家帶來Vue,Mixins與組件繼承,Vue,Mixins與組件繼承的注意事項有哪些,下面就是實戰案例,一起來看一下。前段時間在工作中寫Hybrid頁面時遇到了這樣的一個場景,公司需要一系列的活動組件,在每個組件注冊的時候都需要調用App端提供的一個接口。
推薦度:
標簽: VUE mix 組件
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产午夜电影在线观看 | 国产成人一区二区三区在线播放 | 日韩色在线 | 国产成人综合久久综合 | 黄网站色视频免费观看 | 日本不卡视频在线观看 | 自拍偷拍欧美亚洲 | 欧美三级不卡 | 成人美女黄网站色大色费 | 亚洲福利在线观看 | a级黄色毛片 | 国产高清在线免费 | 国产手机在线国内精品 | 久久精品国产一区二区三区不卡 | 国产91精品久久久久999 | 成人欧美一区二区三区在线 | 国产视频中文字幕 | 国产成人青青热久免费精品 | 欧美第五页 | 不卡一区二区三区四区 | 91大神在线观看精品一区 | 亚洲色图第1页 | 国产亚洲视频在线 | 午夜不卡视频 | 亚洲欧洲日本在线观看 | 囗交免费毛片 | 久久国产精品免费一区二区三区 | 91精品国产91久久综合 | 国产精品资源在线播放 | 国产 欧美 日韩 在线 | 国产午夜在线观看 | 国产不卡在线 | 亚洲一页 | 91在线 | 欧美 | 国产欧美日韩另类va在线 | 国产精品免费观看视频播放 | 亚洲欧美日韩中文字幕在线不卡 | 成人久久久久久 | 91精品一区二区三区在线观看 | 国内久久 | 日韩a无v码在线播放免费 |