我是反应原生的新手.我想将多个小的小字符串存储到普通的单例对象类,并希望从单个对象中为所有组件访问它.任何人都可以帮我单身对象实现反应原生.
防爆
组件1 - 登录按钮 - >>成功 - >需要将userID存储到singleton对象中.
组件2 - >从单例对象获取存储的userID.我该如何实现它.
Yes*_*Jay 45
这是一个简单的方法...
export default class CommonDataManager {
static myInstance = null;
_userID = "";
/**
* @returns {CommonDataManager}
*/
static getInstance() {
if (CommonDataManager.myInstance == null) {
CommonDataManager.myInstance = new CommonDataManager();
}
return this.myInstance;
}
getUserID() {
return this._userID;
}
setUserID(id) {
this._userID = id;
}
}
Run Code Online (Sandbox Code Playgroud)
这是如何使用它...
import CommonDataManager from './CommonDataManager';
// When storing data.
let commonData = CommonDataManager.getInstance();
commonData.setUserID("User1");
// When retrieving stored data.
let commonData = CommonDataManager.getInstance();
let userId = commonData.getUserID();
console.log(userId);
Run Code Online (Sandbox Code Playgroud)
希望这对你有用:)
Dan*_*ing 10
我建议创建一个使用AsyncStorage存储数据的静态类.您在评论中提到您已经在使用AsyncStorage,但不喜欢在整个应用程序中传播此功能.(即try-catches所有地方,每个组件都需要检查密钥是否可用等)如果此功能在一个类中,它将清理您的代码很多.
这种方法的另一个好处是你可以很容易地交换实现,例如,你可以选择使用内存中的对象AsyncStorage或者其他什么,你只需要更改这个文件
注意:AsyncStorage是不存储敏感信息的安全方式.有关安全性和替代方案的更多信息,请参阅此问题AsyncStorage.
也就是说,这就是我想象全局数据持有者类可能看起来的样子:
export default class dataManager {
static storeKeyValue(key, value) {
// your choice of implementation:
// check if key is used
// wrap in try-catch
// etc.
}
static getValueForKey(key) {
// get the value out for the given key
}
// etc...
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用中的任何位置使用此类,只需在需要的地方导入,如下所示:
import dataManager from 'path/to/dataManager.js';
// store value
dataManager.storeKeyValue('myKey', 'myValue');
// get value
const storedValue = dataManager.getValueForKey('myKey');
Run Code Online (Sandbox Code Playgroud)
编辑:在大多数情况下,使用Flux, Redux或类似技术可能是首选/建议的方法,但如果你觉得Singleton模式最适合你的应用程序,那么这是一个很好的方法.看你可能不需要Redux
有一个解决方法,require在编译阶段对所有模块进行反应本机打包以生成捆绑包,并在第一次 require 后为模块生成一个内部 id,从那时起,该 id 将在整个运行时内存中引用,因此,如果我们从文件中导出类的实例,则每次导入该文件时都会引用该对象。
太长了;
解决方案一:
class abc {
}
module.exports = new abc()
Run Code Online (Sandbox Code Playgroud)
解决方案二:我假设您想要获得静态且不会更改的字符串,因此您可以将它们声明为静态并直接使用类名访问它们
仅供参考:这也适用于 webpack。
| 归档时间: |
|
| 查看次数: |
21375 次 |
| 最近记录: |