【发布时间】:2020-08-02 16:30:46
【问题描述】:
我正在尝试在 react-native 中创建一个简单的可重用按钮组件,但由于某种原因,onPress 函数永远不会被调用。我发现的大多数线程只是立即调用该函数或声明错误我相信我的声明应该一切都很好,我也尝试了几种不同的形式但无济于事
import React from 'react';
import { Text, Button, Image, TouchableOpacity } from 'react-native';
import { useHistory } from "react-router-native";
import { getFileUrl } from '../db/firebaseDb';
import styles from '../modules/Styles';
const GameIcon = (props) => {
const history = useHistory();
const handleClick = (pId) => {
console.log("TEST");
history.push("/game");
}
return (
<TouchableOpacity activeOpacity="0.5" onPress={handleClick}>
{(props.imageUrl)?<Image source={{uri: props.imageUrl}} style={{width: 32, height: 32}}/>:<Text>loading...</Text>}
<Button title={props.game.id} key={props.game.id} color={props.color} style={styles.buttons}/>
</TouchableOpacity>
)
}
export default GameIcon;
console.log 从未被触发,我不知道为什么......我尝试将组件编写为 功能游戏图标... 我在没有 TouchableOpacity 的情况下尝试了这个,只是在返回函数中有按钮......在实际设备和模拟器上都不起作用
小更新:
我把return函数的内容改成:
<TouchableOpacity activeOpacity={0.5} onPress={()=>console.log("HELLO")}>
<Text title={props.game.id} key={props.game.id} color={props.color} style={styles.buttons}>{props.game.id}</Text>
</TouchableOpacity>
组件渲染时没有错误或任何东西,它可以被标签化并且不透明度正确更改但不调用 onPress(因此没有控制台日志)
这似乎并不仅限于功能组件...
我将 react-native 文档中的按钮示例 1:1 添加到我的主屏幕上,并且永远不会调用 onPress 事件:
<Button
onPress={() => {
alert('You tapped the button!');
}}
title="Press Me"
/>
【问题讨论】:
-
在 onPress 中调用 this.handleClick
-
@WahdatKashmiri 它的功能组件。
this仅适用于类组件。 -
你的句柄点击有一些参数
-
尝试调用 handleClick 而不是引用它
onPress={() => handleClick('argument')} -
可能是按钮吞下了点击而不是被可触摸处理。
标签: reactjs react-native react-functional-component onpress