React-Native JS 加載原生組件(iOS)

舉例:在RN中,使用image加載網(wǎng)絡(luò)圖片,但是RNimage是沒有緩存效果的;原生中, 使用的是SDWebImage進(jìn)行圖片的緩存處理。如何讓 RN中也有圖片緩存效果呢~
直接讓RN加載原生組件就可以啦

一:一個簡單的JS 加載原生組件

先簡單的熟悉下JS是怎么實(shí)現(xiàn)加載原生組件的

1. 首先我們需要requireNativeComponent這個東東幫助我們在JS中獲取原生組件

import {
    requireNativeComponent
} from 'react-native';
var NativeView = requireNativeComponent('NativeViewClass');

2. 這是 NativeView 就是獲取到的原生組件;NativeViewClass就是原生組件的類名。我們可以直接使用NativeView進(jìn)行布局~

<NativeView style={{width: 100, height:100}} />

3. 看下原生NativeViewClass是怎么實(shí)現(xiàn)的

NativeView.h

#import <React/RCTViewManager.h>

@interface NativeView : RCTViewManager

@end

NativeView.m

#import "NativeView.h"

@implementation NativeView

RCT_EXPORT_MODULE() // 默認(rèn)導(dǎo)出 NativeView


// 需要實(shí)現(xiàn)該方法,目的是返回組件,在RN中獲取到的組件就是view
- (UIView *)view
{
  UILabel *view = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
  view.backgroundColor = [UIColor redColor];
  return view;
}
@end

4. OK~一個簡單的JS 加載原生組件就搞定啦~, 看下效果~

image.png

5. 現(xiàn)在我想在label上顯示一個文字,該怎么顯示呢~ 這時候就需要

RCT_EXPORT_VIEW_PROPERTY 出馬啦,專門導(dǎo)出屬性使用滴~

#import "NativeView.h"

@implementation NativeView

RCT_EXPORT_MODULE()

- (UIView *)view
{
  UILabel *view = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
  view.backgroundColor = [UIColor redColor];
  return view;
}

RCT_EXPORT_VIEW_PROPERTY(text, NSString)
@end

RN中使用~

<NativeView style={{width: 100, height:100, marginTop: 100}}
            text={'哈哈'}
/>

效果~


image.png

6. 假如我在導(dǎo)出一個屬性 placeholder~

RCT_EXPORT_VIEW_PROPERTY(placeholder, NSString)
<NativeView style={{width: 100, height:100, marginTop: 100}}
                            text={'哈哈'}
                            placeholder={'啦啦啦'}
                />
image.png

7. 通過對比這個錯誤和設(shè)置text,可以這樣的猜測~

在RN中使用的NativeView 就是 原生的UILabel對象
NativeView設(shè)置屬性就是給UILabel對象的屬性并實(shí)現(xiàn)set方法
UILabel 有text屬性,可以實(shí)現(xiàn)set方法,但是沒有placeholder 屬性所以不能實(shí)現(xiàn)set方法,所以報錯

image.png

8. 我想加一個點(diǎn)擊事件~

為了規(guī)范及復(fù)用情況,我把類整理一下
原生

image.png

image.png

RN

image.png

image.png

二:一個完整的加載原生視圖

將以上代碼修改修改~
原生

image.png

RN
image.png

使用
image.png

QQ20190213-102306.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容