如何将组件引用传递给 onPress 回调?

2023-11-25

我确实使用 onPress“处理程序”渲染了以下类型的列表。

enter image description here

我意识到 onPress 处理程序是无用的,因为我无法获取按下种族的参考。我收到 ref 未定义错误。

var races = Engine.possibleRaces;

function racePressed(ref) {
    console.log("REF: " + ref); // is never called
}

var races = Engine.possibleRaces;
var rowViews = [];
for (var i = 0; i < races.length; i++) {
  rowViews.push(
    <Text
      ref={i}
      onPress={() => racePressed(ref)} // ref is not defined
      style={styles.raceText}>{races[i].text}
    </Text>

  );
}

<View style={{width: Screen.width, flexDirection:'row', flexWrap: 'wrap', alignItems: "center"}}>
       {rowViews}
</View>  

我也尝试将 i 作为参数传递。它不起作用,因为它具有迭代结束后的值。基本上它有 race.length 值。

  onPress={() => racePressed(i)} // Same as races.length

Edit:

我确实将问题隔离到以下程序。

'use strict';
import React, {
  AppRegistry,
  Component,
  StyleSheet,
  Text,
  View
} from 'react-native';

let texts = [{text: "Click wrapper text1"}, {text: "Click wrapper text2"}];

class sandbox extends Component {

  rowPressed(ref, i) {
    console.log("rowPressed: " + ref + " " + i)
  }

  render() {

    var rows = [];

    for (var i = 0; i < texts.length; i++) {
      rows.push(
        <Text
          ref={i}
          onPress={() => this.rowPressed.bind(this, i)}
          style={styles.raceText}>{texts[i].text}
        </Text>
      );
    }

    return (
      <View style={styles.container}>

        <View>
          {rows}
        </View>

      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center'
  }
});

AppRegistry.registerComponent('sandbox', () => sandbox);

除了以下警告之外,不会调用回调并且不会引发任何错误

[tid:com.facebook.React.JavaScript] Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of `sandbox`. See https://fb.me/react-warning-keys for more information.

我建议你在构造函数中绑定该函数,例如..

constructor(props){
    super(props);
    //your codes ....

    this.rowPressed = this.rowPressed.bind(this);
}

这绑定了thisrowPressed 函数的上下文如您所期望的那样,使您的代码正常工作。

另外,要摆脱警告消息,您应该提供独特的key每个属性<Text>元素,使用<Text key={i} ....>在你的代码中应该可以工作。

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

如何将组件引用传递给 onPress 回调? 的相关文章

随机推荐

  • BeautifulSoup - 获取无 HTML 内容的简单方法

    我使用此代码来查找页面中所有有趣的链接 soup findAll a href re compile notizia php idn d 它的工作做得很好 不幸的是里面atag 有很多嵌套标签 例如font b和不同的东西 我想只获取文本内
  • 像结构成员一样访问 C++14 lambda 捕获

    AFAIK C 11 14 不允许在定义 lambda 时就地定义新的返回类型 然而 C 14 lambda 捕获表达式似乎本质上创建了一个带有一个或多个 成员 和一个运算符 的匿名类型 那么 为什么编译器不允许访问捕获的成员outside
  • T-SQL 根据输入参数的值使用不同的 WHERE 子句

    我想改变WHERE基于输入参数值的查询子句 我猜这是可能的 但似乎我正在以错误的方式接近它 我的 SP 查询的简化版本 CREATE PROCEDURE dbo GetMailboxMessagesByStatus UserId UNIQU
  • 使用外部 js 库在 Amazon Lambda 中将 XML 解析为 JSON

    我正在尝试将从服务器获取的 XML 字符串转换为 Lambda 函数内的 JSON 我设置了这个相当简单的示例来模拟使用 DynamoDB 从服务器获取的 XML 答案 目前我只是想继续进行转换 use strict var AWS req
  • 如何使用 C 在 Linux 上以编程方式终止进程树

    我正在尝试编写一个函数来生成一个子进程 让它运行一段时间 然后在它尚未完成时杀死它 int sysExecTimeout const char exePath int timeoutSec 在函数中 我使用fork and execl生成孩
  • 获取当前请求URL的scheme

    在 Ruby Rack 中 我能够获取当前请求 URL 的方案scheme request 然而 在围棋中 http Request URL Scheme返回一个空字符串 package main import fmt log net ht
  • 为什么 Ansible 显示“错误!任务中未检测到任何操作”错误?

    Ansible 显示错误 错误 任务中未检测到任何操作 这通常表示模块名称拼写错误或模块路径不正确 怎么了 准确的文字记录是 ERROR no action detected in task This often indicates a m
  • 如何使 findpeak 函数检测负峰值而不是正峰值

    我想知道我该怎么做findpeak函数检测负峰而不是正峰 它检测下图所示的红色峰 我需要检测蓝色峰 有什么想法吗 非常感谢 如前所述 你必须使用 data 这是一个例子 x 0 1e 3 5 pi t 0 length x 1 1e 3 y
  • 支持多界面,但主屏幕只有单一界面,在 iOS8 + iPhone 中不工作

    我有如下所示的视图结构 HomeView Support only portrait mode V View1 Support all orientation V View2 Support all orientation 问题 当我com
  • 首先使用代码在实体框架中建模关系问题

    我试图首先在实体框架中学习代码 但在建模关系时遇到问题 它是一个基本的人力资源数据库 因此有两个实体 员工和部门 员工属于一个部门 该部门有一名团队管理员和一名经理 他们实际上都是员工 我尝试使用以下方法对此进行建模 EMPLOYEE pu
  • BackgroundWorker & Timer,只读取日志文件的新行?

    我的应用程序写入一个日志文件 当前使用log4net 我想设置一个计时器和一个后台工作人员来读取日志文件并将其内容打印到我的表单中的某些控件中 同时写入日志文件 我无法使用文件系统观察者类因为似乎被破坏了 有时事件 改变 会触发 有时则不会
  • 删除 CR 行终止符

    首先我想说我已经读过这个帖子但是我仍然有问题CR line terminators 有一个文件叫build test sh 我编辑于leafpad它可以直接显示在Vim cp moonbox llvm 2 9 lib Transforms
  • 如何在B类中定义A类,在A类中定义B类?

    我有两种类型 一种类型 A 一种类型 B 问题类型 A 包含类型 B 类型 B 包含类型 A 这样的事情是行不通的 type typeA record test1 typeB end type typeB record test2 type
  • 使用哪款 Android 手机进行开发...? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我计划将一些游戏从 iPh
  • 免费的 UML 工具,非常适合 .NET [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 谁能推荐一款您曾经使用过并
  • 错误:TypeError:$(...).dialog 不是函数

    我在获取对话框作为基本功能时遇到问题 这是我的 jQuery 源导入 Html
  • 如何使用硬件视频缩放器?

    现代显卡具有硬件视频缩放器 例如作为 AMD Avivo NVIDIA PureVideo 或 Intel ClearVideo 的一部分 例如 AMD 的Avivo 白皮书 says 图像输出缩放器支持最多 6 个垂直滤波器抽头及以上 至
  • 基于区域设置的python csv列表分隔符

    如何使用Python检测用户机器中的列表分隔符 需要在用户计算机上创建 CSV 文件 并且必须自动检测列表分隔符 以便 Excel 可以读取 CSV 文件 我发现 Excel 从 区域选项 gt 数字 gt 列表分隔符 中获取 CSV 元素
  • d3 重置范围后保留比例/平移

    我有一个
  • 如何将组件引用传递给 onPress 回调?

    我确实使用 onPress 处理程序 渲染了以下类型的列表 我意识到 onPress 处理程序是无用的 因为我无法获取按下种族的参考 我收到 ref 未定义错误 var races Engine possibleRaces function