【问题标题】:How to associate an "onPress" event with the Button, TouchableOpacity, etc that generated it?如何将“onPress”事件与生成它的 Button、TouchableOpacity 等相关联?
【发布时间】:2017-09-18 04:35:21
【问题描述】:

在我使用 NativeBase 的 React Native 项目中,我想生成一系列 ButtonsTouchableOpacities

这意味着我不希望每个人都有一个单独的 onPress 处理程序,而是共享一个。

但是当我查看传递给 onPress 回调的内容时,似乎没有任何类型的 ID 或对导致新闻的组件的引用,我也找不到这样的记录。

我是否遗漏了一些明显的东西?每个人都使用另一种方法来实现相同的目标吗?还是这实际上缺少功能?

【问题讨论】:

  • 你希望每个键可以在同一个函数中传递不同的参数吗?
  • @VahidBoreiri:是的,这就是我在其他 GUI 中所习惯的。我尝试将key 添加到每个具有唯一标识的按钮中,但它隐藏在传递给我的onPress 回调的参数的嵌套子项中,因此它不可能是正确的方法。
  • 如果可以,请更新您的代码。所以我可以更好地帮助你。
  • 这经常出现在很少联系的不同措辞下:123456。答案包括使用bindrenderwhich is bad 内的箭头函数,或调用不稳定的未记录内部函数。

标签: events button react-native native-base touchableopacity


【解决方案1】:

您可以如下使用您的功能:

  _onPressButton = (id) = () => {
      // do something with id
  }

  _keyExtractor = (item, index) => index;


  _renderItem = ({item}) => (
    <Button onPress={this._onPressButton(item.d)}>
      ...
    </Button>
  );

  return (
    <FlatList
      data={data_array}
      keyExtractor={this._keyExtractor}
      renderItem={this._renderItem}
    />
  );

【讨论】:

  • 不,您错过了我正在生成按钮,我没有手动声明它们。我将从数组、对象等动态添加它们。
  • 没有什么不同,您可以动态创建按钮并将onPress 方法放入其中。如果你愿意,我可以用这种方式更新我的答案。
  • 我会检查一下,然后带着投票或 cmets 回来,谢谢 (-:
  • 抱歉,我不得不接受这个,因为当我去实际尝试它时,我无法让它单独使用这里的东西。我也没有得到其他答案。
  • 它缺乏上下文。例如,我不知道它是在普通组件、纯组件还是功能组件内。也许我对太多概念太陌生了,无法仅靠这个来解决。
【解决方案2】:

您可以尝试使用ref 来识别组件

&lt;Button ref={'loginButton'} onPress={this.onButtonPress()}&gt;

然后你使用this.refs['loginButton']访问它

希望对你有帮助。

【讨论】:

  • 我需要为此使用bind 吗?在我的搜索中,我看到了很多与 bindthis 相关的东西,我并不完全理解,到目前为止,它们似乎都不适用于我的情况。
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
相关资源
最近更新 更多