使用 TouchableWithoutFeedback 反应本机 onPress 不起作用
React native onPress with TouchableWithoutFeedback is not working
我正在开发一个简单的 React Native 应用程序以供学习。我只是迈出了进入 React Native 世界的第一步。但是在这个非常早期的阶段,我遇到了问题。我无法使简单的触摸事件正常工作。我正在使用 TouchableWithoutFeedback 实现触摸事件。这是我的代码。
class AlbumList extends React.Component {
constructor(props)
{
super(props)
this.state = {
displayList : true
}
}
componentWillMount() {
this.props.fetchAlbums();
}
albumPressed(album)
{
console.log("Touch event triggered")
}
renderAlbumItem = ({item: album}) => {
return (
<TouchableWithoutFeedback onPress={this.albumPressed.bind(this)}>
<Card>
<CardSection>
<Text>{album.artist}</Text>
</CardSection>
<CardSection>
<Text>{album.title}</Text>
</CardSection>
</Card>
</TouchableWithoutFeedback>
)
}
render() {
let list;
if (this.state.displayList) {
list = <FlatList
data={this.props.albums}
renderItem={this.renderAlbumItem}
keyExtractor={(album) => album.title}
/>
}
return (
list
)
}
}
const mapStateToProps = state => {
return state.albumList;
}
const mapDispatchToProps = (dispatch, ownProps) => {
return bindActionCreators({
fetchAlbums : AlbumListActions.fetchAlbums
}, dispatch)
}
export default connect(mapStateToProps, mapDispatchToProps)(AlbumList);
如您所见,我正在列表项上实现触摸事件。但是当我点击模拟器上的卡片时它根本不会触发。为什么?我该如何解决?
您应该像这样将您的内容包装在组件中:
<TouchableWithoutFeedback>
<View>
<Your components...>
</View>
</TouchableWithoutFeedback>
可与<TouchableOpacity activeOpacity={1.0}> </TouchableOpacity>
一起使用
TouchableWithoutFeedback
总是需要有子 View
组件。所以组成 View
的组件是不够的。
所以不用
<TouchableWithoutFeedback onPressIn={...} onPressOut={...} onPress={...}>
<MyCustomComponent />
</TouchableWithoutFeedback>
使用:
<TouchableWithoutFeedback onPressIn={...} onPressOut={...} onPress={...}>
<View>
<MyCustomComponent />
</View>
</TouchableWithoutFeedback>
有关详细信息,请参阅 github issue
对于那些在 react-native 0.64 中遇到这个问题并且将其包装在一个 View 中不起作用的人,试试这个:
<TouchableWithoutFeedback onPress={onPress}>
<View pointerEvents="none">
<Text>Text</Text>
</View>
</TouchableWithoutFeedback>
在我的情况下,下面有阴影,导致不稳定。我解决这个问题的方法很简单:zIndex: 65000
<View style={{ zIndex: 65000 }}>
<TouchableWithoutFeedback onPressIn={() => {}>
<View>
</View>
</TouchableWithoutFeedback>
</View>
在我的例子中,我不小心从 react-native-web 而不是 react-native 导入了 TouchableWithoutFeedback。从 react-native 导入后,一切都按预期工作。
我正在开发一个简单的 React Native 应用程序以供学习。我只是迈出了进入 React Native 世界的第一步。但是在这个非常早期的阶段,我遇到了问题。我无法使简单的触摸事件正常工作。我正在使用 TouchableWithoutFeedback 实现触摸事件。这是我的代码。
class AlbumList extends React.Component {
constructor(props)
{
super(props)
this.state = {
displayList : true
}
}
componentWillMount() {
this.props.fetchAlbums();
}
albumPressed(album)
{
console.log("Touch event triggered")
}
renderAlbumItem = ({item: album}) => {
return (
<TouchableWithoutFeedback onPress={this.albumPressed.bind(this)}>
<Card>
<CardSection>
<Text>{album.artist}</Text>
</CardSection>
<CardSection>
<Text>{album.title}</Text>
</CardSection>
</Card>
</TouchableWithoutFeedback>
)
}
render() {
let list;
if (this.state.displayList) {
list = <FlatList
data={this.props.albums}
renderItem={this.renderAlbumItem}
keyExtractor={(album) => album.title}
/>
}
return (
list
)
}
}
const mapStateToProps = state => {
return state.albumList;
}
const mapDispatchToProps = (dispatch, ownProps) => {
return bindActionCreators({
fetchAlbums : AlbumListActions.fetchAlbums
}, dispatch)
}
export default connect(mapStateToProps, mapDispatchToProps)(AlbumList);
如您所见,我正在列表项上实现触摸事件。但是当我点击模拟器上的卡片时它根本不会触发。为什么?我该如何解决?
您应该像这样将您的内容包装在组件中:
<TouchableWithoutFeedback>
<View>
<Your components...>
</View>
</TouchableWithoutFeedback>
可与<TouchableOpacity activeOpacity={1.0}> </TouchableOpacity>
TouchableWithoutFeedback
总是需要有子 View
组件。所以组成 View
的组件是不够的。
所以不用
<TouchableWithoutFeedback onPressIn={...} onPressOut={...} onPress={...}>
<MyCustomComponent />
</TouchableWithoutFeedback>
使用:
<TouchableWithoutFeedback onPressIn={...} onPressOut={...} onPress={...}>
<View>
<MyCustomComponent />
</View>
</TouchableWithoutFeedback>
有关详细信息,请参阅 github issue
对于那些在 react-native 0.64 中遇到这个问题并且将其包装在一个 View 中不起作用的人,试试这个:
<TouchableWithoutFeedback onPress={onPress}>
<View pointerEvents="none">
<Text>Text</Text>
</View>
</TouchableWithoutFeedback>
在我的情况下,下面有阴影,导致不稳定。我解决这个问题的方法很简单:zIndex: 65000
<View style={{ zIndex: 65000 }}>
<TouchableWithoutFeedback onPressIn={() => {}>
<View>
</View>
</TouchableWithoutFeedback>
</View>
在我的例子中,我不小心从 react-native-web 而不是 react-native 导入了 TouchableWithoutFeedback。从 react-native 导入后,一切都按预期工作。