React-Native自定義插件-讀取本地Userdefaults

最近的項目中采用了React-Native,其中不少功能需要自己來寫原生部分的支持,其中一個就是在RN和原生之間的數據交互,我把自己的經驗寫下來做個記錄。
RN和原生的數據交互有好幾種方式,可是對我來說最熟悉和便利操作的就是UserDefaults,就選用這個了。
場景是我在原生保存一段數據,在RN端讀取并使用。
1.讀取UserDefaults

具體實現:
注:參考了部分博客和github開源代碼,后續補齊。
頭文件
RCTUserDefaults.h

#import <React/RCTBridge.h>
@interface RCTUserDefaults : NSObject <RCTBridgeModule>
@end

實現文件

#import"RCTUserDefaults.h"

@implementationRCTUserDefaults

RCT_EXPORT_MODULE()

//這里就是獲取userdfaults中存儲的值,但是只保留了獲取,而且只是從standardUserDefaults中獲取的。

RCT_EXPORT_METHOD(getObject:(NSString*)key callback:(RCTResponseSenderBlock)cb) {

NSUserDefaults*userDefaults = [NSUserDefaults standardUserDefaults];

NSString*result = [userDefaults stringForKey:key];
//直接獲取字符串的值,用于簡單場景,若需要更加復雜的功能
//那么直接采用react-native-userdefaults-ios,
//使用方法也很簡單。

if(result) {
cb(@[result]);//找到了就返回
}else{
cb(@[@NO]);//╮(╯_╰)╭沒找到
}
}

說起來其實這個原理真不難的…為啥我就是想不到呢~
另一方面,在RN端的實現文件中(xxx為你的鍵值)使用方法為:
在react-native 中引入 NativeModules,
類似于這樣:

import {
    AppRegistry,
    Image,
    ListView,
    StyleSheet,
    TextInput,
    Platform,
    Navigator,
    Alert,
    NativeModules,
    Text,
    View,
} from 'react-native';

然后引入原生功能:

const { UserDefaults } = NativeModules;

使用:

UserDefaults.getObject("xxx", data => {
                            console.log(data);
                            if (data && data.length > 0) {
                              //根據原生返回的不同的值,做不同處理,沒有直接給出成功或者錯誤子句 ,
                              //比如 if(data == false){} 什么的…
                            }
                          });

應該就可以了吧…
ps:
提到的插件的github地址

https://github.com/dsibiski/react-native-userdefaults-ios
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容