Skip to content

Commit a5f2d92

Browse files
docs: rewrite example using hooks (#73)
1 parent 106f1e6 commit a5f2d92

File tree

2 files changed

+55
-52
lines changed

2 files changed

+55
-52
lines changed

Example.App.js

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import * as React from 'react';
1+
import React, { useState, useRef } from 'react';
22
import { Text, View, StyleSheet, TouchableOpacity } from 'react-native';
33
import ConfirmHcaptcha from '@hcaptcha/react-native-hcaptcha';
44

55
// demo sitekey
66
const siteKey = '00000000-0000-0000-0000-000000000000';
77
const 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

6663
const styles = StyleSheet.create({
6764
container: {
@@ -78,3 +75,4 @@ const styles = StyleSheet.create({
7875
},
7976
});
8077

78+
export default App;

README.md

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,28 +55,33 @@ By default, this value is 120 seconds. So, an `expired` error will be emitted to
5555
Once you've utilized hCaptcha's token, call `markUsed` on the event object in `onMessage`:
5656

5757
```js
58-
onMessage = event => {
58+
const onMessage = event => {
5959
if (event && event.nativeEvent.data) {
6060
if (['cancel'].includes(event.nativeEvent.data)) {
61-
this.captchaForm.hide();
61+
captchaForm.current.hide();
6262
} else if (['error'].includes(event.nativeEvent.data)) {
63-
this.captchaForm.hide();
63+
captchaForm.current.hide();
6464
// handle error
6565
} else {
66-
this.captchaForm.hide();
66+
captchaForm.current.hide();
6767
const token = event.nativeEvent.data;
68-
// utlize token and call markUsed once you done with it
68+
// utilize token and call markUsed once you are done with it
6969
event.markUsed();
7070
}
7171
}
7272
};
73-
...
74-
<ConfirmHcaptcha
75-
ref={_ref => (this.captchaForm = _ref)}
76-
siteKey={siteKey}
77-
languageCode="en"
78-
onMessage={this.onMessage}
79-
/>
73+
74+
const captchaForm = useRef(null);
75+
76+
return (
77+
<ConfirmHcaptcha
78+
ref={captchaForm}
79+
siteKey={siteKey}
80+
languageCode="en"
81+
onMessage={onMessage}
82+
/>
83+
);
84+
```
8085
```
8186
8287
### Handling errors and retry

0 commit comments

Comments
 (0)