react-navigation重复点击多次跳转的解决方案
发布时间:2020-12-15 06:36:00 所属栏目:百科 来源:网络整理
导读:废话 在react-native@0.44版本之后,官方废弃了之前的导航Navigator,用react-navigation 替代 react-natvigation于2017年1月份开源,在3个月时间内,GitHub上star数达4000+,备受推崇,由于其性能体验堪比原生,而且使用方便,最后被FB钦点为“御用导航”
废话
分析问题经过观察发现,在onPress事件执行后会触发 ...... navigate: ( routeName: string,params?: NavigationParams,action?: NavigationNavigateAction ): boolean => navigation.dispatch( NavigationActions.navigate({ routeName,params,action }) ),.....
显然,页面跳转时,并未对事件进行控制,只要触发,就会加载新的页面 解决方案既然源码未加控制,我们就手动加上,目前思路有2种 普通版
constructor(props) { super(props) this.state = { waiting: false,//防止多次重复点击 } }
<TouchableOpacity
disabled={this.state.waiting}
onPress={() => this.repeatClick(this.props.navigation)}
>
<Text style={{padding: 10,color: 'red'}}>goto detail page</Text>
</TouchableOpacity>
...
repeatClick(navigation){
this.setState({waiting: true});
/*-------这中间写你需要实现的逻辑------------*/
navigation.navigate('Detail')
/*-------这中间写你需要实现的逻辑------------*/
setTimeout(()=> { this.setState({waiting: false}) },3000);//设置的时间间隔根据实际需要 }
进阶版
......
......
export default function<S: {}>(
navigation: NavigationProp<S>
): NavigationScreenProp<S> {
/* ------------此处为添加的代码--------- */
let debounce = true;// 定义判断变量
/* ------------此处为添加的代码--------- */
return {
...navigation,goBack: (key?: ?string): boolean => {
let actualizedKey: ?string = key;
if (key === undefined && navigation.state.key) {
invariant(
typeof navigation.state.key === 'string','key should be a string'
);
actualizedKey = navigation.state.key;
}
return navigation.dispatch(
NavigationActions.back({ key: actualizedKey })
);
},navigate: (
routeName: string,params?: NavigationParams,action?: NavigationNavigateAction
/* ------------此处为修改后的的代码--------- */
): boolean =>{
if (debounce) {
debounce = false;
navigation.dispatch(
NavigationActions.navigate({
routeName,params,action,}),);
setTimeout(
() => {
debounce = true;
},5000,);
return true;
}
return false;
},/* ------------此处为修改后的的代码--------- */
......
......
此时onPress事件无需再加控制 <TouchableOpacity // disabled={this.state.waiting} onPress={() => this.props.navigation.navigate('Detail')} > <Text style={{padding: 10,color: 'red'}}>goto detail page</Text> </T
本人翻译了 react-navigation的官方文档地址:https://www.reactnavigation.org.cn/,欢迎访问 本文结束,欢迎大家加群共同学习QQ群:672509442 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |