Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >re--装饰器+ useObserver不重新渲染

re--装饰器+ useObserver不重新渲染
EN

Stack Overflow用户
提问于 2020-11-13 06:45:55
回答 2查看 423关注 0票数 1

我不能用MobX重新渲染。我正在根据文件设置所有的东西。我的类包含actionobservable装饰器。我试着用useObserver hookobserver HOC连接React组件,它简单地说不会重新呈现

片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import ReactDOM from "react-dom";
import { action, observable } from "mobx";
import { observer, useObserver } from "mobx-react-lite";

class Timer {
  @observable secondsPassed: number = 0;

  @action increaseTimer() {
    console.log("here");
    this.secondsPassed += 1;
  }
}

const myTimer = new Timer();

setInterval(() => {
  myTimer.increaseTimer();
}, 1000);

const TimerView = ({ timer }: { timer: Timer }) => {
  return useObserver(() => <div>{timer.secondsPassed}</div>);
};

ReactDOM.render(<TimerView timer={myTimer} />, document.body);

https://codesandbox.io/s/minimal-observer-forked-gif4q?file=/src/index.tsx

我想和装饰师合作,我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-15 22:09:28

经过4个小时的研究。我的团队的项目是使用MobX版本4.x,代码库使用装饰器作为上面的示例。

版本6之前的MobX鼓励使用ES.next装饰器将事物标记为可观察的、计算的和操作的。然而,装饰师目前还不是一个ES标准,标准化过程需要很长时间。该标准看起来也将不同于以前实现装饰师的方式。为了兼容性起见,我们选择了在MobX 6中不再使用它们,而是建议使用makeObservable / makeAutoObservable。

MobX文档

这意味着,MobX现在需要使用makeObservable(This)将类声明为在构造函数中可观察到的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { makeObservable } from "mobx";

class Timer {
  @observable secondsPassed: number = 0;

  @action increaseTimer() {
    this.secondsPassed += 1;
  }

  // THIS IS IMPORTANT FROM MOBX 6.X ONWARDS
  constructor() {
    makeObservable(this);
  }
}

从医生那里:

版本6之前的MobX不需要构造函数中的makeObservable(this)调用,但是由于它使装饰器的实现更简单和更兼容,所以现在需要了。这指示MobX使实例能够在装饰器中的信息之后被观察到--装饰器代替了makeObservable的第二个参数。

进一步阅读MobX

票数 1
EN

Stack Overflow用户

发布于 2020-11-13 07:10:59

您需要将您的应用程序与供应商包装,并将商店作为支柱通过。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Provider } from 'mobx-react';


ReactDOM.render(
 <Provider {myTimer}> <TimerView timer={myTimer} /> </Provider>,
  document.body
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64822953

复制
相关文章
typescript属性装饰器不生效的问题
这里会发现,setter相关的代码没有被执行,这是因为使用属性装饰器来修改属性的行为(例如拦截属性的访问或修改),则需要返回一个属性描述符。属性描述符包含有关属性的配置信息,例如属性是否可写(writable)、是否可枚举(enumerable)以及属性的get和set函数等
easonxie
2023/07/25
8560
重新认识HTML渲染过程
浏览器从输入地址到显示页面的过程,这是面试特别喜欢问的一道题,也是基础的一个概念。到现在,网上能找到的也都是很老的那一套,早之前我的认知也是那样:
wade
2021/05/08
1.5K0
重新认识HTML渲染过程
python装饰器2:类装饰器
"类装饰器"有两种解读方式:用来装饰类的装饰器;类作为装饰器装饰其它东西。你如何认为取决于你,两种说法都有出现在其它的文章中。我的文章中是将"类装饰器"解读为第一种方式,即装饰类的东西。而“类作为装饰器装饰其它东西”,我都会为其标注"类作为装饰器"或"作为装饰器的类"以避免歧义。
py3study
2020/01/19
1.2K0
装饰器
 一、装饰器的简单介绍 1 # /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 ''' 装饰器 ''' 4 ''' 5 装饰器的工作原理 6 1. python的执行顺序是从上到下顺序执行. 7 2. 当执行到outer函数的时候, 将其内容放入内存, 执行到f1的时候.在f1上发现@outer装饰器. 8 3. 执行outer函数, 并将其下的函数名f1作为参数传递给outer 9 4. 将out
用户7798898
2022/05/06
2530
装饰器
def fun(): def fun1(num): return num+1 return fun1 c = fun() print(c(1)) 在主函数中不能直接调用嵌套函数里的子函数如:fun1(num),需要先调用嵌套中的母函数如:fun(),然后把fun()函数中的子函数fun1()的地址传递给一个变量,然后才可以直接调用子函数fun1 一下是装饰器函数的标准模式,可以采用断点debug来一步步运行深入理解函数执行步骤 装饰器编码思路:将新的函数地址赋值给旧的函数,
IT人一直在路上
2019/09/18
3660
Vue数据不渲染问题
使用vue开发项目的时候,几乎都会遇到一个问题,数据改变了,但是页面没有渲染。这种情况下一般都是数组和json才会发生。
wade
2020/04/24
1.6K0
装饰器
初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下:
hankleo
2022/05/10
2410
装饰器
一。关于装饰器: 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 二.实现装饰器知识必备技能: 1.函数即“变量” 2.高阶函数 a.把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码下为其添加功能) b.返回值中包含函数名(不修改函数的调用方式) 3.嵌套函数 高阶函数 +嵌套函数=》装饰器 2.1函数即“变量”(一切皆对象) 在 python中,一切皆对象,变量是对象,函数是对象,类是对象,所有的一切都是对
用户1679793
2018/04/28
7240
装饰器
装饰器
装饰器Decorators是Python的重要组成部分。 简而言之:它们是修改另一个函数功能的函数。 他们有助于使我们的代码更简洁,更Pythonic。
Helloted
2022/06/07
3060
装饰器
def f2(func): #定义一个函数加参数,其中的func参数为装饰器的函数体 def f3(w1,w2) #这个函数可以进行w1,w2参数 print("吴永聪") #输出吴永聪 ret = func(w1,w2) #装饰函数体的参数并将其赋给ret print("123") #输出123 return ret #返回ret的值 return f3 #返回f3函数的参数 @f2 #@使用装饰器
Wyc
2018/09/11
3510
python装饰器1:函数装饰器详解
假如你已经定义了一个函数funcA(),在准备定义函数funcB()的时候,如果写成下面的格式:
py3study
2020/01/19
6940
Python高级编程-装饰器1.装饰器的理解 2.多个装饰器 3.装饰器(decorator)功能 4.装饰器示例
装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python,看了下面的文章,保证你学会装饰器。
Python攻城狮
2018/08/23
5370
Python高级编程-装饰器1.装饰器的理解
2.多个装饰器
3.装饰器(decorator)功能
4.装饰器示例
详解强制Vue组件重新渲染的方法
虽然Vue不会自动更新这种情况是相对比较少,但是知道如何在出现这个问题时修复它还是很有用的。
Javanx
2020/08/19
4.3K0
TypeScript系列教程十一《装饰器》 -- 属性装饰器
属性装饰器和其他装饰器功能类似,其设计也是为了统一的、复用度更高的去监听,改变属性。
星宇大前端
2022/05/06
1.1K0
TypeScript系列教程十一《装饰器》 -- 属性装饰器
函数的装饰器,两层装饰器和三层装饰器
两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是不能减少他的程序内容,他的原来程序不变只能增不能减少,然后返回装饰好的子函数,再全局定义一个变量名与要装饰的函数名相同名字,并且将装饰后的函数调用赋予改变量.
小小咸鱼YwY
2019/07/24
7890
TypeScript系列教程十一《装饰器》 -- 参数装饰器
系列教程 TypeScript系列教程一《开篇》 TypeScript系列教程二《安装起步》 TypeScript系列教程三《基础类型》 TypeScript系列教程四《扩展类型》 TypeScript系列教程五《对象类型》》 TypeScript系列教程六《泛型》 TypeScript系列教程七《接口》 TypeScript系列教程八《类》 TypeScript系列教程九《高级类型》 TypeScript系列教程九《类型转换》-- keyof和typeof 操作 TypeScript系列教程九《类型转换》
星宇大前端
2022/05/06
6380
TypeScript系列教程十一《装饰器》 -- 参数装饰器
TypeScript系列教程十一《装饰器》 -- 类装饰器
类装饰器顾名思义是对类的内容进行修饰,在Typescript 类其实就是对象,这样配合原型对象操作可以达到操作类的目的。
星宇大前端
2022/05/06
7970
TypeScript系列教程十一《装饰器》 -- 类装饰器
ArkTS-@Provide装饰器和@Consume装饰器
@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过明明参数机制传递,@Provide和@Consume拜托参数传递机制的舒服,实现跨层级传递。其中@Provide装饰的变量是在祖先结点中,可以理解为被”提供“给后代的状态变量。@Consume装饰的变量是在后代组件中,去“消费(绑定)”祖先节点提供的变量。
酒楼
2023/06/27
4840
ArkTS-@Observed装饰器和@ObjectLink装饰器
上文所属的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的 数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二层的属性变化是无法观察到的。这就引出了@Observed/@ObjectLink装饰器
酒楼
2023/07/05
7510
点击加载更多

相似问题

装饰渲染器

10

ContentControl旋转装饰器渲染

20

mobx UseObserver不在存储更新时重新呈现。

12

装饰再渲染

10

项目渲染器未设置装饰器

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文