当前位置: 首页 > 知识库问答 >
问题:

如何从方法中更改JavaScript对象的状态?

莫英喆
2023-03-14

我的JavaScript对象的状态声明如下:

state = {isFiltered: false}

我有一个方法changeState(),它基本上执行以下操作:

this.setState({isFiltered: true});

然而,这将给我一个错误,即“setState”不是一个函数。如何从方法中更改此标志?

编辑:我不知道如何正确绑定。SOF一允许我就接受解决方案

共有3个答案

符渊
2023-03-14

错误是由于不同的上下文造成的。

上下文是将“这个”与特定范围联系起来的概念。

为了解决上述问题,您需要使用bind()绑定ChangeState()函数。

这将允许Change eState使用类的上下文,您可以在其中访问setState方法。

戴化
2023-03-14

您是否将您的Change eState函数与this绑定?

constructor(props) {
    super(props);
    this.state = {isFiltered: true};

    // This binding is necessary to make `this` work in the callback
    this.changeState = this.changeState.bind(this);
    ...
蓝慈
2023-03-14

你似乎没有this的边界上下文:

一个快速修复方法是在构造函数内部绑定这个

this.changeState = this.changeState.bind(this)

如果你想深潜,你可以跟随我的另一篇文章。

 类似资料:
  • 本文向大家介绍JavaScript更改原始对象valueOf的方法,包括了JavaScript更改原始对象valueOf的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript更改原始对象valueOf的方法。分享给大家供大家参考。具体分析如下: JS中的对象都包含valueOf方法,我们可以通过自定义valueOf函数替换掉原始object的valueOf 希望本文所述

  • 我在更改联系人对象中的变量值时遇到问题。我正在尝试制作一个联系人列表,但我无法更改变量trach方法的值。我有editTouch方法调用change eName方法,这两个方法都传递了ArrayList对象trach引用,所以它不应该在main方法中更改值trach ArrayList时出现问题,但问题是当我想更改对象的名称时它不会更改它。我这里缺少什么吗?

  • 问题内容: 我只是阅读了watch()方法的Mozilla文档。它看起来非常有用。 但是,我找不到与Safari类似的东西。既不是Internet Explorer。 您如何管理跨浏览器的可移植性? 问题答案: 我不久前为此创建了一个小object.watch垫片。它适用于IE8,Safari,Chrome,Firefox,Opera等。

  • 问题: 我使用 pinia 进行状态管理,写法大概如下,由于我修改的是数组中某个对象下的对象的属性,数组更新后,页面无法重新渲染。 当我点击按钮修改元素的 x,y,width,height 某个样式值的时候,layerList 中对应的元素的下的style对象的下属性值也会更新,由于页面是根据这个对象来渲染内联样式的, style 在手动更新后一直无法更新,想请教下各位大佬这是什么原因? 数组 l

  • 问题内容: 根据文档,反应应用程序的状态必须是可序列化的。那班呢? 假设我有一个ToDo应用。到目前为止,每个项目都具有,等属性。现在,我想对不可序列化的对象使用方法。即这将重命名待办事项,做了很多其他的东西。 据我了解,我可以在某处声明函数,然后通过props将该函数传递给组件。 我在声明某个地方时遇到两个问题:1)在哪里?在减速器中?在应用程序的化简器中很难找到所有方法。2)传递此功能。真?我

  • 问题内容: 在viewmodel对象中,以下是属性: 在VIEW中,javascript如下: 请在这里指导,我如何在javascript中获取JSON对象。 问题答案: 您可以使用以下内容: 这将输出以下内容(没有看到您的模型,我仅包含一个字段): 工作小提琴 AspNetCore AspNetCore使用的接口 MVC 5/6 您可以为此使用Newtonsoft: 这使您可以更好地控制json