React-Native自定义插件-读取本地Userdefaults

最近的项目中采用了React-Native,其中不少功能需要自己来写原生部分的支持,其中一个就是在RN和原生之间的数据交互,我把自己的经验写下来做个记录。
RN和原生的数据交互有好几种方式,可是对我来说最熟悉和便利操作的就是UserDefaults,就选用这个了。
场景是我在原生保存一段数据,在RN端读取并使用。
1.读取UserDefaults

具体实现:
注:参考了部分博客和github开源代码,后续补齐。
头文件
RCTUserDefaults.h

#import 
@interface RCTUserDefaults : NSObject 
@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

你可能感兴趣的:(React-Native自定义插件-读取本地Userdefaults)