react-native TouchableNativeFeedback onPress 不起作用
react-native TouchableNativeFeedback onPress not working
我创建了一个组合组件来将 TouchableNativeFeedback 组合到 wrapperComponent。
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
{/* <TouchableOpacity
onPress={this.props.onContainerViewPress ? () => this.props.onContainerViewPress() : null}
>
<WrappedComponent {...this.props} />
</TouchableOpacity> */}
</View>
);
}
};
}
但是 TochableNativeFeedback 的 OnPress 事件没有触发。而 OnPress 事件被正确触发并且 onContainerViewPress 如果 wrappercomponent 包裹在 TouchableOpacity 下则调用 wrappercomponent 的道具。
我正在 Android 平台上进行测试。
您可以调用如下方法:
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
this.onContainerViewPress = this.onContainerViewPress.bind(this);
}
onContainerViewPress() {
const { onContainerViewPress } = this.props;
onContainerViewPress();
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => { this.onContainerViewPress(); }}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
{/* <TouchableOpacity
onPress={this.props.onContainerViewPress ? () => this.props.onContainerViewPress() : null}
>
<WrappedComponent {...this.props} />
</TouchableOpacity> */}
</View>
);
}
};
}
使用 <View></View>
将 WrappedComponent
换成 TouchableNativeFeedback
。
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}>
<View>
<WrappedComponent {...this.props} />
</View>
</TouchableNativeFeedback>
我发现向 TouchableNativeFeedback
添加涟漪效果可以解决我的问题:
background={TouchableNativeFeedback.Ripple("#FFFFFF",true)}
即
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}
background={TouchableNativeFeedback.Ripple("#FFFFFF",true)}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
</View>
);
}
};
}
尝试从 React Native 手势处理库中导入 Touchable Native 反馈
有两个不同的TouchableNativeFeedback
类。确保导入正确的:
import { TouchableNativeFeedback } from "react-native"
import { TouchableNativeFeedback } from "react-native-gesture-handler"
我遇到了类似的问题,最后从 "react-native" 库中使用了它。从 "react-native-gesture-handler" 导入它对我不起作用。
import { TouchableNativeFeedback } from "react-native"
import { TouchableNativeFeedback } from "react-native-gesture-handler"
补充 mangei 的答案问题可能是您从错误的地方导入它。如果您在手势处理程序中,则必须从 react-native-gesture-handler
导入它(注意:默认情况下,react-navigation
的 TabBar
本身有一个 PanGestureHandler
。 react-native-gesture-handler
所做的是将 ScrollView
或 TouchableNativeFeedback
之类的组件包装在自己的实现中,以便能够处理 GestureHandler
内的手势以及“不适合”的手势GestureHandler
而不是 ScrollView
或 TouchableNativeFeedback
。如果您在手势处理程序中,则必须从 react-native-gesture-handler
导入它,否则从 react-native
.
尝试:useForeground={true}
<TouchableNativeFeedback onPress={() => {}} useForeground={true}>
我创建了一个组合组件来将 TouchableNativeFeedback 组合到 wrapperComponent。
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
{/* <TouchableOpacity
onPress={this.props.onContainerViewPress ? () => this.props.onContainerViewPress() : null}
>
<WrappedComponent {...this.props} />
</TouchableOpacity> */}
</View>
);
}
};
}
但是 TochableNativeFeedback 的 OnPress 事件没有触发。而 OnPress 事件被正确触发并且 onContainerViewPress 如果 wrappercomponent 包裹在 TouchableOpacity 下则调用 wrappercomponent 的道具。
我正在 Android 平台上进行测试。
您可以调用如下方法:
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
this.onContainerViewPress = this.onContainerViewPress.bind(this);
}
onContainerViewPress() {
const { onContainerViewPress } = this.props;
onContainerViewPress();
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => { this.onContainerViewPress(); }}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
{/* <TouchableOpacity
onPress={this.props.onContainerViewPress ? () => this.props.onContainerViewPress() : null}
>
<WrappedComponent {...this.props} />
</TouchableOpacity> */}
</View>
);
}
};
}
使用 <View></View>
将 WrappedComponent
换成 TouchableNativeFeedback
。
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}>
<View>
<WrappedComponent {...this.props} />
</View>
</TouchableNativeFeedback>
我发现向 TouchableNativeFeedback
添加涟漪效果可以解决我的问题:
background={TouchableNativeFeedback.Ripple("#FFFFFF",true)}
即
export default function withFeedback2(
WrappedComponent
) {
return class extends BaseComponent {
constructor(props) {
super(props);
}
render() {
return (
<View>
<TouchableNativeFeedback
onPress={() => this.props.onContainerViewPress()}
background={TouchableNativeFeedback.Ripple("#FFFFFF",true)}
>
<WrappedComponent {...this.props} />
</TouchableNativeFeedback>
</View>
);
}
};
}
尝试从 React Native 手势处理库中导入 Touchable Native 反馈
有两个不同的TouchableNativeFeedback
类。确保导入正确的:
import { TouchableNativeFeedback } from "react-native"
import { TouchableNativeFeedback } from "react-native-gesture-handler"
我遇到了类似的问题,最后从 "react-native" 库中使用了它。从 "react-native-gesture-handler" 导入它对我不起作用。
import { TouchableNativeFeedback } from "react-native"
import { TouchableNativeFeedback } from "react-native-gesture-handler"
补充 mangei 的答案问题可能是您从错误的地方导入它。如果您在手势处理程序中,则必须从 react-native-gesture-handler
导入它(注意:默认情况下,react-navigation
的 TabBar
本身有一个 PanGestureHandler
。 react-native-gesture-handler
所做的是将 ScrollView
或 TouchableNativeFeedback
之类的组件包装在自己的实现中,以便能够处理 GestureHandler
内的手势以及“不适合”的手势GestureHandler
而不是 ScrollView
或 TouchableNativeFeedback
。如果您在手势处理程序中,则必须从 react-native-gesture-handler
导入它,否则从 react-native
.
尝试:useForeground={true}
<TouchableNativeFeedback onPress={() => {}} useForeground={true}>