无法读取未定义的属性 - javascript 类

2023-12-28

我想尝试 mobx 进行反应状态管理,但是,我无法让它工作。我有一个简单的存储,用于存储一个称为计数器的数字。您可以增加/减少它,并增加 x。我有这个文件 store.js 用于存储状态:

import { action, makeObservable, observable } from "mobx";


class CounterStore {
    counter = 0;

    constructor() {
        makeObservable(this, {
            counter: observable,
            increment: action,
            decrement: action,
            increase: action
        });
      
    }

    increment() {
        this.counter++;
    }

    decrement() {
        this.counter--;
    }

    increase(value) {
        this.counter = this.counter + value;
    }
}

const store = new CounterStore();

export default store;

然后我在 Counter.js 中有一个名为 Counter 的组件,它执行存储的递增和递减等方法

import { useRef } from "react";
import classes from './Counter.module.css'
import store from "../store";

function Counter() {

    const numberInput = useRef();

    const increaseHandler = (event) => {
        event.preventDefault(); 
        if (numberInput.current.value === ''){
            return;
        }
        store.increase(parseInt(numberInput.current.value))
    };
    return (
        <div>
            <div className={classes.counter}>{store.counter}</div>
            <div className={classes.row}>
                <button className={classes.btn} onClick={store.increment}>Increment</button>
                <button className={classes.btn} onClick={store.decrement}>Decrement</button>
            </div>
            <form className={classes.row} onSubmit={increaseHandler}>
                <button className={classes.btn}>Increase by x</button>
                <input className={classes.input} required="true " type="number" ref={numberInput} />
            </form>

        </div>
    );
}

export default Counter;

但当我按下按钮时,我总是得到

Uncaught TypeError: Cannot read properties of undefined (reading 'counter') at increment

计数器怎么可能是未定义的?我已经导出实例化商店。


你的函数正在失去上下文(this), 你需要阅读相关内容 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this了解它是如何工作的。您从商店中解构了这个函数,它不再与它绑定。

最常见的方法是将所有操作定义为箭头函数,如下所示:

    // Use arrow function to define methods
    increment = () => {
        this.counter++;
    }

    decrement = () => {
        this.counter--;
    }

    increase = (value) => {
        this.counter = this.counter + value;
    }

这样你就不需要担心上下文,它会自动绑定到当前类。

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

无法读取未定义的属性 - javascript 类 的相关文章

  • 在 Node.js 中实现服务器发送事件的简单方法?

    我环顾四周 似乎在 Node js 中实现 SSE 的所有方法都是通过更复杂的代码 但似乎应该有一种更简单的方法来发送和接收 SSE 是否有任何 API 或模块可以让这件事变得更简单 这是一个每秒发送一个服务器发送事件 SSE 的 Expr
  • 动态添加jinja模板

    我有一个 jinja 模板 它是一组 div 标签内的唯一内容 div include temppage html div 当我按下按钮时 我想用其他内容替换标签之间的所有内容 我希望用另一个 jinja 模板 include realpa
  • JavaScript 中的可选参数

    如果缺少剩余参数 为什么该函数不会抛出错误 showStatistics Mark Teixeira New York Yankees 1st Base 这是定义的函数 function showStatistics name team p
  • JSSOR - 无法读取未定义的类型属性“currentStyle”

    我正在尝试将 Jssor 滑块实现到我的页面中 但我不断在标题中出现该错误 我的内容是通过 Javascript 动态创建的 如下所示 var slide app createHTML div id inventorySlides null
  • 如何在没有数据库的情况下创建AJAX分页?

    是否可以在没有 MySQL 帮助的情况下获取 AJAX 分页页面 难道我不能只添加一个包含我需要显示的文本和标记的 PHP 文件 然后通过单击页码将该内容提供给用户吗 那么可以用纯 jQuery 和 PHP 来实现吗 您会使用什么代码方法来
  • 如何在 .js 中的字符串中插入来自 ruby​​ 示例的变量[重复]

    这个问题在这里已经有答案了 在 ruby 中 您可以将变量插入到字符串中 如下所示 x sake puts I like x I like sake 例如 def what i like word I like word end 在 jav
  • Bootstrap shown.bs.tab 事件不起作用

    我正在使用灵活的模板 http the8guild com themes html flexy v1 7 stylesPage html 使用引导程序 并且我无法让选项卡上的 shown bs tab 事件正常工作 我已经成功让它发挥作用J
  • 递归链接 Promise

    我正在开发一个简单的 Windows 8 应用程序 我需要在其中从网站获取一组数据 我正在使用 WinJS xhr 来检索此数据 它返回一个 Promise 然后 我将回调传递到此 Promise 的 then 方法中 该方法为我的回调提供
  • 角度引导手风琴数据绑定问题

    我有 2 个相同型号的下拉菜单 一个位于手风琴内部 另一个位于外部 外部下拉菜单在 2 路数据绑定方面工作良好 但手风琴内部的下拉菜单似乎只有 1 路绑定 换句话说 在 UI 中选择并不会设置模型值 我找到了一个建议here https s
  • Node.js 循环发送 http 请求

    我实际上遇到了使用 node js 执行的 javascript 代码的问题 我需要循环发送http请求到远程服务器 我在代码中设置了www google ca 这是我的代码 var http require http var option
  • Puppeteer 无法在 VPS (DigitalOcean) 上工作

    我在水滴中数字海洋 https www digitalocean com 我收到这个错误 node 5549 UnhandledPromiseRejectionWarning TimeoutError Navigation Timeout
  • 有效地获取下拉列表中的选定选项(XHTML Select 元素)

    背景 使用 XHTML Select 元素的下拉列表中有大量选项 数十个 我需要使用 JavaScript 检索所选选项 Problem 目前我正在使用 jQuery selectedCSS 选择器并且它按预期工作 但这种方法效率不高 因为
  • 单击文件下载后,成功后使用 AJAX 重定向到另一个页面

    In my WordPress project my Download button containing a zip file which onClick should be downloaded So the HTML producin
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • 访问事件处理程序内的对象实例

    我有以下代码 var myObj inputs document getElementsByTagName input attachKeyEvent function for var i 0 i lt this inputs length
  • 关于 Node.js Promise then 和 return?

    我对承诺感到困惑 I use 那么就答应没有返回像这样 new Promise resolve reject gt resolve 1 then v1 gt console log v1 new Promise resolve reject
  • 用于检查字符串是否至少包含 3 个字母数字字符的最有效的正则表达式

    我有这个正则表达式 a zA Z0 9 3 我用它来查看字符串中是否至少包含 3 个字母数字字符 似乎有效 它应该匹配的字符串示例 a3c 0 c 8 9 9d 但是 我需要它更快地工作 有没有更好的方法使用正则表达式来匹配相同的模式 编辑
  • Recoil 中的动态原子键

    我正在尝试创建一个动态表单 其中表单输入字段是根据 API 返回的数据呈现的 由于atom需要有一个唯一的键 我尝试将它包装在一个函数中 但是每次我更新字段值或重新安装组件 尝试更改选项卡 时 我都会收到一条警告 我在这里做了一个小的运行示
  • 如何连接/组合两个数组以连接成一个数组?

    我正在尝试将 JavaScript 中的 2 个数组合并为一个 var lines new Array a b c lines new Array d e f 这是一个简单的例子 我希望能够将它们组合起来 这样当读取第二行时 数组中的第四个
  • d3.js 更新视觉效果

    我有一个与 d3 js 放在一起的树形图 我通过 getJSON 填充数据 效果很好 但是 我在 setInterval 方法中具有此功能 并且它似乎并没有刷新自身 var treemap d3 layout treemap padding

随机推荐

  • 在哪里放置我的守护程序应用程序的调试日志文件?

    我使用C语言和Linux作为我的编程平台 我正在学习如何创建守护程序 并且我想创建一个日志文件 以便在守护程序中写入调试消息 我的问题是我应该将日志文件放在系统中的哪里 我应该把它放在var文件夹中吗 请指教 非常感谢 你应该使用syslo
  • 如何将 .sh 文件与 Cygwin 关联?

    我想通过双击 Windows 中的 sh 文件来在 Cygwin 中运行长 rsync 命令 它必须从文件所在的目录 例如 cygdrive c scripts 开始 以便相对路径起作用 有人得到这个工作吗 注 我刚刚发现here http
  • Chromedriver 不会打开新会话,它会在现有会话中打开新选项卡

    我的代码在某些 PC 上运行正常 但有一个它不会打开新的私人会话 在这种特殊情况下 它会在已打开的同一窗口中加载当前的 chrome 配置文件 我尝试查看一些 stackoverflow 问题 看看其他人是否也遇到过这种情况 但没有成功 尝
  • 在函数声明和定义中使用 noexcept 说明符?

    考虑以下函数 Declaration in the h file class MyClass template
  • 获取 jQuery 集合中最宽的元素

    假设我有一堆 span 具有不同文本内容的元素 我怎样才能获得最广泛的 span jQuery 没问题 我只关心识别跨度 而不关心宽度本身的值 类似的问题是here https stackoverflow com questions 724
  • Spring Mobile - 拦截器未应用?设备为空

    我正在尝试 Spring Mobile 但我似乎无法让基本示例正常工作 我有一种感觉 我错过了一些愚蠢简单的东西 但我不知道它是什么 这是我所拥有的 在 web xml 中
  • Jenkins 电子邮件通知设置

    我正在尝试为我的詹金斯服务器设置构建失败的电子邮件通知 我尝试过的事情 1 使用我公司的 smtp 邮件服务器进行身份验证 不起作用 连接被拒绝 2 设置我自己的 James 邮件服务器 SMTP 服务器 本地主机 身份验证 管理员 管理员
  • Electron 在开发中运行时显示空白屏幕,但在生产中运行

    当我在 CLI 中运行 yarn run electro dev 时 打开http 本地主机 3000 http localhost 3000在浏览器中显示主页 但电子应用程序显示空白 与其他人在生产中遇到问题但在开发中工作的类似问题不同
  • jQuery.Deferred().then,多参数如何解析

    所以我的 API 期望当特定的延迟得到解决时 它会获得 2 个参数 fn done function arg1 arg2 console log arg1 arg2 fail function err console error err 现
  • SQLite 如何查找最常见出现的值

    假设我有一个带有属性 X 的表 A 如何找到出现次数最多的 X 可以有多个具有相同的最高出现次数 IE 表A X a b c c b 我想回来 X b c 我不能在 Sqlite 中使用关键字 ALL 所以我不知所措 我想获取每个 X 的计
  • Laravel-mix 没有构建通知

    我正在使用 Vue js 和 Laravel Mix 当我保存项目时 我没有收到这样的任何通知 我在跑npm run watch 编译时 我的控制台不显示任何错误 警告 我已经检查过webpack mix js for mix disabl
  • 如何在 Chrome 扩展的内容脚本中导入 ES6 模块

    In 铬61 添加了对 JavaScript 中模块的支持 现在我运行的是 Chrome 63 我正在尝试使用import exportChrome 扩展内容脚本中的语法以使用模块 In manifest json content scri
  • 无限滚动 jquery 插件

    我正在尝试在我正在使用 Coldfusion 开发的网站上设置无限滚动 我对 javascript 和 jquery 很陌生 所以我在解决所有这些问题时遇到了一些问题 我的网站是否需要分页才能使用无限滚动插件 或者有没有办法不需要它 为此
  • Boost编译点云库时出现的问题

    我正在尝试在 OSX 10 6 8 上从源代码编译点云库 并且在使用 Boost 库时不断遇到相同的错误 make Linking CXX shared library lib libpcl common dylib Undefined s
  • 找不到 autoconf。请检查 CentOS 中的 autoconf 安装 Xampp

    在 CentOS 中的 XAMPP 中使用 php 配置 memcached 时出现另一个错误 opt lampp bin phpize Configuring for PHP Api Version 20131106 Zend Modul
  • 如何使用 Express 或 Body-Parser 拒绝无效的 JSON 正文

    我正在创建一个仅接受 json 主体类型并使用主体解析器和express 的应用程序 不断出现的问题是 如果我发送无效的 json 正文 那么我的程序将向用户和控制台抛出一个愚蠢的错误 我如何防止此控制台错误并拒绝具有不正确 JSON 正文
  • Angular 2+拦截Command+S的优雅方式

    尝试实现 Command S 的快捷键组合来保存表单 我读过这个 https angular io guide user input https angular io guide user input 但它没有提及任何有关元或命令的信息 尝
  • 从故事板设置的 UINavigationBar 背景颜色与代码设置的颜色不同

    我的应用程序仅适用于iOS 8我正在与XCode 6 1 1 如果我通过故事板设置颜色 设置Bar Tint属性上Navigation Bar部分 所需的颜色是 56 186 145 I used 核心编码实用程序 http www cor
  • AVPlayer Live 流如何获取音频电平计量的电源

    我试图在我的应用程序中显示一个仪表图 它使用 AVPlayer 来传输实时音频流 我知道对于 AVAudioPlayer 有一种方法 尝试了解 AVAudioPlayer 和音频电平计量 https stackoverflow com qu
  • 无法读取未定义的属性 - javascript 类

    我想尝试 mobx 进行反应状态管理 但是 我无法让它工作 我有一个简单的存储 用于存储一个称为计数器的数字 您可以增加 减少它 并增加 x 我有这个文件 store js 用于存储状态 import action makeObservab