You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何在TouchableOpacity onPress时传递自定义值

React Native中TouchableOpacity点击传值的正确实现

你当前写法的核心问题是直接执行了handlePress函数:onPress={handlePress("value1")}会在组件渲染时立刻调用函数,而不是点击按钮时触发,自然达不到预期效果。另外注意你的代码里Viev是拼写错误,要改成View。

下面是几种可行的实现方式:

方式一:箭头函数包裹(最直观)

用箭头函数把传值逻辑包起来,点击时才执行handlePress:

const handlePress = (value) => {
    console.log(value);
}

return (
    <View>
      <TouchableOpacity onPress={() => handlePress("value1")}>
          <Text>ButtonText</Text>
      </TouchableOpacity>

      <TouchableOpacity onPress={() => handlePress("value2")}>
          <Text>ButtonText</Text>
      </TouchableOpacity>
    </View>
)

方式二:通过组件属性+事件对象获取(类似Web端data属性思路)

给TouchableOpacity添加自定义属性,在事件回调里通过event.currentTarget.props获取:

const handlePress = (event) => {
    const buttonValue = event.currentTarget.props.someValue;
    console.log(buttonValue);
}

return (
    <View>
      <TouchableOpacity someValue="value1" onPress={handlePress}>
          <Text>ButtonText</Text>
      </TouchableOpacity>

      <TouchableOpacity someValue="value2" onPress={handlePress}>
          <Text>ButtonText</Text>
      </TouchableOpacity>
    </View>
)

方式三:函数绑定(适合需要性能优化的场景)

用bind提前绑定参数,或者结合useCallback避免每次渲染创建新函数:

import { useCallback } from 'react';

// 用useCallback缓存函数,避免重复创建
const handlePress = useCallback((value) => {
    console.log(value);
}, []);

return (
    <View>
      <TouchableOpacity onPress={handlePress.bind(null, "value1")}>
          <Text>ButtonText</Text>
      </TouchableOpacity>

      <TouchableOpacity onPress={handlePress.bind(null, "value2")}>
          <Text>ButtonText</Text>
      </TouchableOpacity>
    </View>
)

内容的提问来源于stack exchange,提问作者Benevos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:42:24