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

仅更新单击元素的状态

巫马庆
2023-03-14

所以我的代码是:

export default class MyClass extends Component {

  constructor(props) {
    super(props);
    this.state = {
        data: [
          {id: 101, name:"One", thevalue:11},
          {id: 102, name:"Two", thevalue:22},
          {id: 103, name:"three", thevalue:33}
        ]
    }
  }

  handleOnPress() {
    << HOW DO I CODE THIS ?? >>
    I want to increase the number count in thevalue of the pressed item
  }

  render() {
      return(
        <FlatList
            data = {this.state.data}
            renderItem = {
                ({item}) => 
                <TouchableOpacity onPress={this.handleOnPress} >
                    <Text> {item.name} + {item.thevalue} </Text>
                </TouchableOpacity>
            }
        />
    )
  }
}

我希望能够增加仅单击项目的值的计数。所以我应该做一个setState对吗?但是我怎么知道我需要在哪个项目上运行它呢?是否需要将单击项目的id传递给函数?如果是,我该怎么做?

非常感谢。

更新:

handleOnPress(id) {
      this.setState({
        thevalue: this.state.thevalue+1
    });
}

共有2个答案

庞修贤
2023-03-14

您可以将id传递到on按然后更新相应的

html prettyprint-override">export default class MyClass extends Component {

  constructor(props) {
    super(props);
    this.state = {
        data: [
          {id: 101, name:"One", thevalue:11},
          {id: 102, name:"Two", thevalue:22},
          {id: 103, name:"three", thevalue:33}
        ]
    }
  }

  handleOnPress(id) {
    let {data} = this.state;
    let idx = data.findIndex(x => x.id == id);
    data[idx].thevalue ++;
    this.setState({data});
  }

  render() {
      return(
        <FlatList
            data = {this.state.data}
            renderItem = {
                ({item}) => 
                <TouchableOpacity onPress={() => this.handleOnPress(item.id)} >
                    <Text> {item.name} + {item.thevalue} </Text>
                </TouchableOpacity>
            }
        />
    )
  }
}
全誉
2023-03-14

您必须给它一个参数,以便我们知道要增加的项:

onPress={this.handleOnPress.bind(this, item.id)}
...
handleOnPress(id) {
    // increment id
}

或者这更容易理解,但做同样的事情:

onPress={() => this.handleOnPress(item.id)}
 类似资料:
  • 我的用户表有以下存储库界面。 我想禁用在用户表中插入新实体,并仅在存在现有条目的情况下使用保存功能来更新现有条目。我如何才能做到这一点?是否有可以传递到存储库界面的选项?或者,当没有匹配的实体时,我应该重写save方法而不执行任何操作吗?

  • 接口说明 更新素材状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /wish3dearth/api/material/v1.0.0/changeMaterialStatus 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN materia

  • 接口说明 更新素材状态 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 POST /wish3dearth/api/material/v1.0.0/

  • 我的JButton ActionListener有问题。我在另一个类中定义了一个doTheCleaning()方法,当调用该方法时,会对GUI进行一系列更改。 然后,在另一个类中,我实例化了包含doTheCleaning()方法的类,并用jbutton的actionperformed()方法编写了ActionListener,如下所示: 我知道如何执行其他操作,比如addActionListene

  • 我正在使用硒进行测试。我想点击一个元素。元素非常可点击和可见,但元素的中间点被遮挡,导致错误。 这是一个主视频: 超文本标记语言代码(链接到演示): Python selenium代码: 结果: 这似乎是硒的一个相当可悲的限制。按钮是可点击的,但不是在所有点。我不想摆弄滚动和坐标。 一般来说,关于异常有许多类似的问题,例如: 无法单击元素:元素单击碎片/硒中的异常 硒不能点击元素,因为其他元素掩盖

  • 问题内容: 我正在尝试没有Jquery的情况。我想在单击触发器时显示div。到目前为止,我已经隐藏了这个元素。 HTML .. 单击链接时如何创建显示div的函数?我想避免在链接本身中使用类似的功能。 问题答案: