1- import * as React from 'react' ;
1+ import React , { useState , useRef } from 'react' ;
22import { Text , View , StyleSheet , TouchableOpacity } from 'react-native' ;
33import ConfirmHcaptcha from '@hcaptcha/react-native-hcaptcha' ;
44
55// demo sitekey
66const siteKey = '00000000-0000-0000-0000-000000000000' ;
77const baseUrl = 'https://hcaptcha.com' ;
88
9- export default class App extends React . Component {
10- state = {
11- code : null ,
12- } ;
13- onMessage = event => {
9+ const App = ( ) => {
10+ const [ code , setCode ] = useState ( null ) ;
11+ const captchaForm = useRef ( null ) ;
12+
13+ const onMessage = event => {
1414 if ( event && event . nativeEvent . data ) {
1515 if ( [ 'cancel' ] . includes ( event . nativeEvent . data ) ) {
16- this . captchaForm . hide ( ) ;
17- this . setState ( { code : event . nativeEvent . data } ) ;
16+ captchaForm . current . hide ( ) ;
17+ setCode ( event . nativeEvent . data ) ;
1818 } else if ( [ 'error' ] . includes ( event . nativeEvent . data ) ) {
19- this . captchaForm . hide ( ) ;
20- this . setState ( { code : event . nativeEvent . data } ) ;
19+ captchaForm . current . hide ( ) ;
20+ setCode ( event . nativeEvent . data ) ;
2121 console . log ( 'Verification failed' , event . nativeEvent . data ) ;
2222 } else if ( event . nativeEvent . data === 'expired' ) {
2323 event . reset ( ) ;
@@ -26,42 +26,39 @@ export default class App extends React.Component {
2626 console . log ( 'Visual challenge opened' ) ;
2727 } else {
2828 console . log ( 'Verified code from hCaptcha' , event . nativeEvent . data ) ;
29- this . captchaForm . hide ( ) ;
29+ captchaForm . current . hide ( ) ;
3030 event . markUsed ( ) ;
31- this . setState ( { code : event . nativeEvent . data } ) ;
31+ setCode ( event . nativeEvent . data ) ;
3232 }
3333 }
3434 } ;
3535
36- render ( ) {
37- let { code } = this . state ;
38- return (
39- < View style = { styles . container } >
40- < ConfirmHcaptcha
41- ref = { _ref => ( this . captchaForm = _ref ) }
42- siteKey = { siteKey }
43- baseUrl = { baseUrl }
44- languageCode = "en"
45- onMessage = { this . onMessage }
46- />
47- < TouchableOpacity
48- onPress = { ( ) => {
49- this . captchaForm . show ( ) ;
50- } } >
51- < Text style = { styles . paragraph } > Click to launch</ Text >
52- </ TouchableOpacity >
53- { code && (
54- < Text style = { { alignSelf : 'center' } } >
55- { 'passcode or status: ' }
56- < Text style = { { color : 'darkviolet' , fontWeight : 'bold' , fontSize : 6 } } >
57- { code }
58- </ Text >
36+ return (
37+ < View style = { styles . container } >
38+ < ConfirmHcaptcha
39+ ref = { captchaForm }
40+ siteKey = { siteKey }
41+ baseUrl = { baseUrl }
42+ languageCode = "en"
43+ onMessage = { onMessage }
44+ />
45+ < TouchableOpacity
46+ onPress = { ( ) => {
47+ captchaForm . current . show ( ) ;
48+ } } >
49+ < Text style = { styles . paragraph } > Click to launch</ Text >
50+ </ TouchableOpacity >
51+ { code && (
52+ < Text style = { { alignSelf : 'center' } } >
53+ { `passcode or status: ` }
54+ < Text style = { { color : 'darkviolet' , fontWeight : 'bold' , fontSize : 6 } } >
55+ { code }
5956 </ Text >
60- ) }
61- </ View >
62- ) ;
63- }
64- }
57+ </ Text >
58+ ) }
59+ </ View >
60+ ) ;
61+ } ;
6562
6663const styles = StyleSheet . create ( {
6764 container : {
@@ -78,3 +75,4 @@ const styles = StyleSheet.create({
7875 } ,
7976} ) ;
8077
78+ export default App ;
0 commit comments