onpress写逻辑 react_RN-逻辑崩溃处理:react-native-exception-handler

import React, {PureComponent} from 'react';

import {

DeviceEventEmitter,

TouchableOpacity,

View,

Text,

Alert

} from 'react-native'

import Render from './render'

import PropsType from 'prop-types'

import styles from "./styles";

import HocErrorCatch from './HocErrorCatch'

import {setJSExceptionHandler, setNativeExceptionHandler} from 'react-native-exception-handler'

/**

* JS_Exceptions:你的Javascript代码产生的错误

*

* 第一个参数,错误发生时调用的函数

* 第二个参数,设置true,在开发模式下调用处理程序代替 red 屏幕

*

* error 错误信息

* isFatal 是否是致命的,一定发生崩溃的

*/

setJSExceptionHandler((error, isFatal)=>{

// 您可以捕获这些未处理的异常并执行诸如显示警报或弹出窗口之类的任务,执行清理甚至点击API以在关闭应用程序之前通知开发团队。

Alert.alert(error.name,error.message,[{text: 'OK'}])

}, true)

//

//

//

//

// /*

// * Native_Exceptions:Native Modules产生的错误。仅在正式环境下调用

// *

// * 第一个参数,错误发生时调用的函数

// * 第二个参数,android下使用,用于在程序发成错误时,是否自动关闭程序

// * 第三个参数,设置true,确保定义的其他异常处理可以及时的调用

// *

// * errorString 错误信息

// * */

//

// setNativeExceptionHandler((errorString)=>{

// //自定义全局错误处理程序、崩溃日志

//

// //注意:通过JS警告或显示任何UI更改,在NATIVE ERRORS的情况下不会触发

// },false, true)

//

/*

* 高阶组件方式使用

* */

@HocErrorCatch

export default class RNTestPage extends React.Component {

constructor(props) {

super(props);

this.state = {

count: 0

}

this.onPress = this.onPress.bind(this);

}

onPress(){

let newCount = this.state.count + 1

this.setState({

count: newCount

},()=>{

if (this.state.count == 5){

throw new Error('i crashed!!!')

}

})

}

render() {

// let a = [1,2,3]

// let value = a[3].toString()

return (

点击我,第5次就崩溃啦

{

// 找不到方法

this.abc()

// 对于 undefined 进行操作

// let a = [1,2,3]

// let value = a[3].toString()

}}>

点击我,直接崩溃

正常页面显示

)

}

}

和 componentDidCatch 配合使用,页面崩溃处理 + 逻辑崩溃处理,防止大部分的崩溃~

React Native中,如果你想要创建一个点击按钮后带有动画效果的打卡成功提示,可以借助第三方库如`react-native-easing`来添加动画,并结合`TouchableOpacity`或`TouchableHighlight`组件。这里是一个简单的步骤: 1. 首先,你需要安装所需的库,例如: ``` npm install react-native-reanimated react-native-gesture-handler react-native-easing @react-native-community/masked-view ``` 2. 然后,在你的组件中引入并导入相关的模块: ```javascript import { Easing, TouchableOpacity } from 'react-native'; import { useAnimatedStyle, useSharedValue } from 'react-native-reanimated'; import { MaskedView } from '@react-native-community/masked-view'; ``` 3. 创建一个布尔值共享状态表示是否打卡成功,以及动画相关的动画样式: ```javascript const [isTapped, setIsTapped] = useSharedValue(false); const animatedStyles = useAnimatedStyle(() => ({ opacity: isTapped.value ? 1 : 0, translateY: isTapped.value ? -50 : 0, // 根据需求调整动画高度 animation: { duration: 300, // 动画持续时间 easing: Easing.easeInOutBack, // 动画缓动函数 toValue: isTapped.value ? 0 : 100, // 初始位置到结束位置 }, })); ``` 4. 在`TouchableOpacity`或`TouchableHighlight`组件上设置点击事件处理程序,当点击时改变`isTapped`的状态并触发动画: ```javascript <TouchableOpacity onPress={() => setIsTapped(!isTapped)} style={[ styles.button, animatedStyles, ]} > <Text>打卡</Text> </TouchableOpacity> // 如果需要背景遮罩,添加MaskedView <MaskedView maskElement={<View style={{ height: 100, width: '100%', backgroundColor: 'rgba(0, 0, 0, 0.5)' }} />} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'center', alignItems: 'center', }} > <Text>{isTapped.value ? '已打卡' : '还未打卡'}</Text> </MaskedView> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值