为什么 MobX v6.x 在 React with Typescript 中不能按预期工作?

2023-11-26

我目前正在编写一个 React 应用程序,它应该能够在任何可观察到的值发生变化时重新渲染组件。问题是我无法得到email如果发生变化则重新渲染。

store.ts

export class ExampleStore {
  @observable email = 'hello';

  @action setEmail(email: string) {
    this.email = email;
  }
}

索引.tsx

const stores = {
  exampleStore
};

ReactDOM.render(
  <Provider {...stores}>
    <App />
  </Provider>,
  document.querySelector('#root')
);

App.tsx

interface Props {
  exampleStore?: ExampleStore;
}

@inject('exampleStore')
@observer
export class App extends React.Component<Props, {}> {
  componentDidMount() {
    setInterval(() => {
      this.props.exampleStore!.setEmail(Math.random() * 10 + '');
    }, 2500);
  }

  render() {
    const { email } = this.props.exampleStore!;
    return <div>{email}</div>;
  }
}

我见过很多例子使用useContext钩子,但我必须使用类组件。我不确定为什么这不会再次调用渲染函数。我有mobx and mobx-react安装。


你在使用 MobX 6 吗?

Decorator API 发生了一些变化,现在你需要使用makeObservable构造函数内的方法实现与以前相同的功能:

class ExampleStore {
  @observable email = "hello";

  constructor() {
    makeObservable(this);
  }

  @action setEmail(email) {
    this.email = email;
  }
}

尽管有新的东西可能会让你完全放弃装饰器,makeAutoObservable:

class ExampleStore {
  email = "hello2";

  constructor() {
    // Don't need decorators now, just this call
    makeAutoObservable(this);
  }

  setEmail(email) {
    this.email = email;
  }
}

更多信息请点击这里:https://mobx.js.org/react-integration.html

代码沙箱:https://codesandbox.io/s/httpsstackoverflowcomquestions64268663-9fz6b?file=/src/App.js

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 MobX v6.x 在 React with Typescript 中不能按预期工作? 的相关文章

  • 无法验证 CSRF 令牌的真实性 Rails/React

    我的 Rails 应用程序中有一个 React 组件 我正在尝试使用它fetch 发送一个POST对于我在本地主机上托管的 Rails 应用程序 这给了我错误 ActionController InvalidAuthenticityToke
  • React-Redux:绑定按键操作以启动减速器序列的规范方法是什么?

    这是一个关于react redux的新手问题 我花了几个小时四处搜寻才发现 所以我发布了这个问题 然后为后代回答 也可能是代码审查 我正在使用 React Redux 创建一个游戏 我想使用 WASD 键在小地图上移动角色 这只是更大努力的
  • 打开对话框时,Material-UI 会向 body 标记添加填充

    我在我的 React 应用程序中使用 Material UI 最近 我将我的软件包更新到了 最新版本 现在 当我在应用程序中打开一个对话框时 padding right 17px 将被添加到 body 标签中 我还检查了 Material
  • create-react-app 抛出错误:“package.json 中缺少依赖项”

    所以我尝试运行reactjs官方教程并使用第一行代码 npx create react app react tutorial 我收到以下错误 npx installed 91 in 12 692s Creating a new React
  • 如何在React中处理多个路由器

    假设我们有一个网络应用程序 它通常有很多视图 例如索引页面 管理面板 帮助页面 联系人等 我在主index js 中使用react router dom 来处理它们 它工作得很好 但是现在我在开发管理面板时遇到了问题 它是 index js
  • 无法在 .tsx 文件中导入 CSS 模块

    我正在使用 typescript 构建基本的 React 应用程序 但无法导入 CSS 文件索引 tsx file 我能够导入索引 css文件如下 import index css this import gives typescript
  • 需要将mxGraph与react js集成

    是否有任何示例或示例项目解释如何将 mxGraph 与 React js 集成 import React Component from react import PropTypes from prop types import ReactD
  • 如何在React Material UI简单输入中启用文件上传?

    我正在创建一个简单的表单来使用带有 redux 表单和材料 ui 的 electro react boilerplate 来上传文件 问题是我不知道如何创建输入文件字段 因为材料用户界面不支持上传文件输入 关于如何实现这一目标有什么想法吗
  • 发布到 npm 时出现问题

    所以我尝试使用 React 构建一个开源项目并将其推送到 npm 问题是 我的组件虽然在测试环境中运行良好 安装到其他组件 但当我将其发布到 npm 并下载包并尝试访问它时 它给了我一个错误 这是代码的一个小示例 import React
  • 过滤嵌套的 JSON 对象

    我有一个搜索栏 您可以在其中输入员工姓名 它应该根据过滤器返回姓名 我有一个嵌套的 JSON 对象 如下所示 我需要深入了解该对象以访问数组中的员工姓名 您可以看到我尝试实现的多个选项 它们已被注释掉 我的问题是代码没有过滤名称并返回所有名
  • 在React组件中使用的字符串变量中插入html

    我正在为我的投资组合网站构建一个反应应用程序 目前我已经用 JSX 编写了应用程序 因此我可以添加以下内容 class Project extends React Component render return div h1 this pr
  • AWS JS SDK TypeError:STS 不是构造函数

    我有一个 ReactJS 应用程序 它使用 aws sdk 进行认知登录 我用了yarn安装所有模块 但是当我尝试访问 localhost 的网站时 出现 JS 错误 未捕获 承诺中 类型错误 STS 不是构造函数 错误指向该行aws sd
  • 由于 CORS 错误,POST 请求在 React axios 中被阻止[重复]

    这个问题在这里已经有答案了 我正在尝试向包含多部分数据的 API 发送 POST 请求 我在 postman 中测试了 API 一切正常 但是当我在react中调用API时 它给了我CORS错误 我交叉检查了 URL 标头和数据 对我来说一
  • 如何将 Twitter 小部件嵌入到 Reactjs 中?

    前往 Twitter 小部件网站 https publish twitter com https publish twitter com 我可以获得一个小部件添加到我的网站 我正在使用示例代码来尝试了解它的工作原理 a class twit
  • 如何正确地将代码从angularjs迁移到reactjs

    我正在尝试将代码从 Angular 迁移到 React 不确定这是否正确 只是需要一些帮助 看看我是否朝着正确的方向前进 我不知道角度 所以我很困惑 文本数据 是否类似于反应中的状态 我是否必须在顶部的状态中声明它 角度代码 scope t
  • 你如何在react-native中实现捏合缩放?

    我一直在研究 PanResponder 我当前的工作假设是 我将检测是否有两个触摸正在向外移动 如果是 则增加元素大小onPanResponderMove功能 这似乎是一种混乱的方法 有没有更顺畅的方法呢 如果您只需要简单的捏缩放功能 只需
  • 语法:const {} = 变量名,任何人都可以解释或指出我正确的方向[重复]

    这个问题在这里已经有答案了 这个语法在 JavaScript 中意味着什么 可能是 ES6 const 变量名 我目前正在尝试掌握 React 在很多例子中我都遇到过这种语法 例如 const girls guys women men st
  • 有什么方法可以复制 div 的渲染 HTML 吗?

    我正在开发电子邮件签名生成器 我想通过按按钮复制最终签名 而不是手动选择签名并将其复制到剪贴板 这意味着我需要它们的图像 文本和样式 我尝试了几种变体 包括 w3schools 的变体 但没有成功 其中一些只是复制文本 但没有样式 例子 h
  • React中如何触发同级组件的函数?

    I am new to front end world and could not figure out how to trigger a function from a sibling component Lets say I have
  • 在 React 中使用 .less 文件

    我正在尝试将 less 文件与极简主义 React 应用程序一起使用 使用创建反应应用程序 我已经添加less and less loader to my 包 json以及我的模块规则webpack config js文件 然而 类引用并未

随机推荐

  • 验证信用卡详细信息

    如何验证信用卡 我需要做卢恩检查 黑莓有没有API可以做到这一点 您可以使用以下方法来验证信用卡号 Perform Luhn check public static boolean isCreditCardValid String card
  • Javascript 中变量声明语法(包括全局变量)之间的区别?

    声明变量有什么区别 var a 0 1 这边走 a 0 2 or window a 0 3 在全球范围内 是的 有一些差异 但实际上它们通常并不大 除了你的 2 a 0 A 我强烈建议不要这样做 B 在严格模式下是一个错误 还有第四种方法
  • 如何在端口 80 上运行 Node.js?

    我的目标是在端口 80 上运行 Node js 这是因为我发现某些网络阻止了 Node js 这些网络不允许来自任何其他端口的流量 看来 最好的方法是通过 Node js 代理 Apache 我尝试过使用节点 http 代理做到这一点 但我
  • Java RSA 加密 - 解密 .NET

    我正在使用 RSA 在 JAVA 上进行加密 并尝试使用 NET 进行解密 我提供了我的 JAVA 代码和 NET 代码 希望有人对此类事情有一些经验 JAVA代码 byte modulusBytes Base64 decode xTSiS
  • Arrays.asList 的返回类型是什么?

    我读了这篇文章 java 中 Arrays asList array 与 new ArrayList Arrays asList ia 之间的区别 我对此有一个疑问 我看看这一行 List
  • 如何运行 Maven Surefire 而不将测试结果打印到命令行?

    我正在运行 Maven 3 1 0万火插件 already与 quiet选项 但是它仍然将单元测试的结果打印到命令行 即使它们全部通过 有没有办法让它只打印失败 如果一切正常 我想抑制的输出如下所示 T E S T S Running ne
  • R:如何按列删除重复行[重复]

    这个问题在这里已经有答案了 df lt data frame id c 1 1 1 2 2 gender c Female Female Male Female Male variant c a b c d e gt df id gende
  • 即使应用程序未打开,后台进程也会定期扫描用户的位置并更新本地数据库

    我正在创建一个应用程序 该应用程序每半小时检查一次用户位置并更新本地数据库中的用户位置 然后基于用户的位置运行 CRUD 查询 即使该应用程序未运行也是如此 我该怎么做 我已经提到过这个http techtej blogspot com e
  • FastMM:分配的总内存

    我怎样才能获得FastMM分配的内存总量 我已经尝试过 function GetTotalAllocatedMemory Cardinal var MMState TMemoryManagerState begin GetMemoryMan
  • 内联 JavaScript 正则表达式更快吗?

    使用 RegExp 对象还是内联样式更好 为什么 根据 ES3 规范 它们略有不同 因为文字语法 regex 将创建一个RegExp初始扫描时的对象 正则表达式文字是 输入元素被转换为 RegExp 对象 第 15 10 节 当它 被扫描
  • 循环遍历 DataGridView 单元格

    我正在创建一个生成条形码然后打印运输标签的程序 我有一个功能 允许用户将电子表格上传到数据网格视图中 列名称之一是 跟踪号码 我希望能够循环遍历具有跟踪号码的每个单元格 然后在名为 条形码 的列中的新单元格中生成条形码 我知道有一个循环函数
  • 如何从 Capybara 和 ChromeDriver 中拖动 jQuery 滑块手柄?

    我可以执行以下代码来移动滑块手柄 但浏览器中触发的事件没有发生 page execute script Q slider handicap slider values 1 30 这正确地将右侧手柄设置为 30 但我需要它的行为就像我实际上拿
  • JQuery Mobile textarea:如何使用“rows”属性?

    我想使用 JQuery Mobile 动态生成具有不同行数的文本区域 我打算为此使用淘汰赛 将数据绑定到rows属性 例如 这里 http jsfiddle net j7b9A 2
  • 删除 .NET RichTextBox 中的特定行

    如何删除 RichTextBox 中的特定文本行 另一个解决方案 private void DeleteLine int a line int start index richTextBox GetFirstCharIndexFromLin
  • 如何使用 RLMArray 保存数组

    注意 我对 Realm 和 Swift 相当陌生 所以请原谅我不理解的任何明显的事情 我有一个正在工作的 UITableView 我计划用任务填充它 我希望用户能够根据需要添加和删除任务 因此我无法对任务进行硬编码 并且我希望在应用程序启动
  • 返回 JSONP 的 Restful api 的节点 HTTP 请求

    我正在尝试使用node js 对restful API 进行服务器端调用 JSONP JS 函数内的 JSON 容器 的返回返回错误 这似乎是节点 http get options callback API 的核心 节点或任何模块可以从 J
  • Android 音频编程噩梦 - soundpool、audiotrack arrghh?

    我构建了一个简单的音乐音序器 Android 应用程序 可以播放多个音频文件 最初我使用 SoundPool 来播放 mp3 文件 它在 2 3 4 上与旧的 HTC Droid Incredible 完美配合 然后我在运行 4 3 的 G
  • JPA多对多关系导致无限递归和堆栈溢出错误

    我正在开发一个 EclipseLink 项目 其中一个用户可以 关注 另一个用户 就像在社交媒体网站上一样 我有这个设置User实体 引用一个名为users 其中有一个 关注者 列表 关注该用户的用户 和另一个 关注 列表 该用户正在关注的
  • ASP.NET WSAT(网站管理工具)和自定义会员资格提供程序

    我正在构建一个 ASP NET MVC 应用程序 它将具有自定义角色和成员资格提供程序 我一直在研究管理工具来节省我们一些时间 WSAT已经横穿了我的道路 一眼看上去不错 都是开源的 而且很简单 如果不行我可以自己修复 第一个问题是 你们中
  • 为什么 MobX v6.x 在 React with Typescript 中不能按预期工作?

    我目前正在编写一个 React 应用程序 它应该能够在任何可观察到的值发生变化时重新渲染组件 问题是我无法得到email如果发生变化则重新渲染 store ts export class ExampleStore observable em