# 鸿蒙开发如何通过用户首选项实现数据持久化
###### 这里的存储类似于vue中的vuex,react中的redux
接下来带来实现步骤
1.导入用户首选项模块。
```
import preferences from '@ohos.data.preferences';
```
2.要通过用户首选项实现数据持久化,首先要获取Preferences实例。读取指定文件,将数据加载到Preferences实例,用于数据操作。
所有代码实例:
```
import preferences from '@ohos.data.preferences';
class PreferencesUtil{
preMap:Map<string,preferences.Preferences>=new Map()
async loadPreference(context,name:string){
try {
let pref = await preferences.getPreferences(context,name)
this.preMap.set(name,pref)
console.log(`加载preference${name}成功`)
}catch(e){
console.log(`加载preference${name}失败`,JSON.stringify(e))
}
}//存储数据
async putPreferenceVale(name:string,key:string,value:preferences.ValueType){
if(!this.preMap.has(name)){
console.log(`加载preference${name}失败`,`${name},尚未初始化`)
return
}
try{
console.log(JSON.stringify(value),'你好')
let pref=this.preMap.get(name)
// @ts-ignore
await pref.put(key,JSON.stringify(value))
// @ts-ignore
await pref.flush()console.log("成功",`保存${name}.${key}=${value}成功`)
// return value
}catch(e){
console.log("保存失败",JSON.stringify(e))
}}
//读取数据
async getPreferenceValue(name:string,key:string,defaultVale:preferences.ValueType){
if(!this.preMap.has(name)){
console.log(`加载preference${name}失败`,`${name},尚未初始化`)
return
}
try{
console.log(JSON.stringify(this.preMap),'hhhh')
let pref=this.preMap.get(name)
// @ts-ignore
console.log(JSON.stringify(pref),"赛666666")
let value= await pref.get(key,defaultVale)
console.log("testTag",`读取${name},${key}=${value}成功}`)
return value
}catch(e){
console.log("读取失败",JSON.stringify(e))
}
}
pref(pref: any,arg1: string) {
throw new Error('Method not implemented.');
}}
const preferencesUtil = new PreferencesUtil();export default preferencesUtil as PreferencesUtil;
```
## 注意:存储完需要pref.flush() 进行持久化.
3.项目中具体读取示例.
```
@State _id:string = ""
@State username:string = ""
@State password:string = ""
@State imgPath:string = ""
async aboutToAppear(){
this._id = await SharePre.getPreferenceValue('MyPreferences','_id','666') as string
this.username = await SharePre.getPreferenceValue('MyPreferences','username','666') as string
this.password = await SharePre.getPreferenceValue('MyPreferences','password','666') as string
this.imgPath = await SharePre.getPreferenceValue('MyPreferences','imgPath','666') as string
}
```
4写入
```
SharePre.putPreferenceVale('MyPreferences','username',val.data.data.username)
SharePre.putPreferenceVale('MyPreferences','password',val.data.data.password)
SharePre.putPreferenceVale('MyPreferences','telephone',val.data.data.telephone)
SharePre.putPreferenceVale('MyPreferences','_id',val.data.data._id)
SharePre.putPreferenceVale('MyPreferences','imgPath',val.data.data.imgPath)
```
修改会替换掉上次的存储
## 最终拿出来数据 需要进行切割
```
Image(this.imgPath.slice(1,this.imgPath.length-1))
```