mobx 6 关于computed 不更新的bug
2023-02-18 16:29:04 时间
bug收集:专门解决与收集bug的网站
网址:www.bugshouji.com
今日分享: 使用mobx时,遇到的关于computed不更新
项目代码:
constructor(){
makeAutoObservable(this)
}
get user(){
if(sessionStorage.getItem("user")){
return JSON.parse(sessionStorage.getItem("user"));
}
return {};
}
set user(data){
sessionStorage.setItem("user",JSON.stringify(data));
}
问题描述:
登录成功后,修改user的值,组件不能得到新的值 ,要刷新后才能获取值
login=(userInput)=>{
// 只进行数据处理,不进行界面的提示信息
return new Promise((resolve,reject)=>{
// 1. 发起axios请求
service.userSerive.User_Login(userInput).then((data)=>{
this.user=data.data;
resolve(data);
}).catch((err)=>{
reject(err);
})
});
}
相关文档:
计算值可以有 setters 你也可以为计算值定义一个 setter。需要注意的是,这些 setters 不能直接更改计算属性的值, 但是它们可以被当作派生的“逆操作”使用。setters 会被自动标记为 actions。 https://zh.mobx.js.org/computeds.html#computed-struct
例如:
class Dimension {
length = 2
constructor() {
makeAutoObservable(this)
}
get squared() {
return this.length * this.length
}
set squared(value) {
this.length = Math.sqrt(value)
}
}
问题分析:
setters 会被标记为action , 调用了action是不会重新渲染,而要让重新渲染,还是要依赖 observable 变量发生改变。
而我项目中的代码中,直接操作的sessionStorage,而不是修改observable变量,故不会刷新
解决方案:
使用observable 变量,代码如下:
_user = sessionStorage.getItem("user")?JSON.parse(sessionStorage.getItem("user")):{};
get user(){
return this._user;
}
set user(data){
this._user = data;
sessionStorage.setItem("user",JSON.stringify(data));
}
苟有恒 , 何必三更眠五更起
相关文章
- 玩转 CSS Flexbox 弹性布局
- GET 和 POST 请求方式的区别
- Acrobat 9 Pro软件安装教程PDF编辑器全版本软件下载
- 初识 yarn 包管理工具
- 一张图解析 FastAdmin 中的表格列表
- fastadmin 动态下拉组件 SelectPage
- MyISAM 和 InnoDB 的区别
- cookie 和 session 的区别
- Adobe Acrobat Pro DC 2019.021.20061免激活中文特别版pdfb编辑器下载
- async + await 的理解和用法(Promise)
- 运营商三要素实名认证接口(姓名、身份证号、手机号)
- 2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。
- Metaverse、Web3 和 NFT 的必然性
- STM32使用硬件I2C读取SHTC3温湿度传感器并显示在0.96寸OLED屏上
- STM32单片机读取AHT10温湿度传感器数据
- 大数据Kudu(四):Kudu集群搭建
- 指点云 宿迁 12900K高防云服务器 性能测评,4核8G 10兆 150G防御 仅需160元/月
- STM32软件I2C读取AM2320温湿度传感器数据
- 自从用了灰度发布,睡觉真香!
- Spring Cloud 最新版发布,Spring Security + OAuth2 终于安排上了!