[[oktatas:telefon:react_native|< React Native]] ====== react-native-signature-canvas ====== * **Szerző:** Sallai András * Copyright (c) 2023, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Telepítés ===== npm install react-native-signature-canvas ===== Projekt készítése ===== npx create-expo-app alairas alairas/ |-assets/ |-node_modules/ |-.gitignore |-App.js |-app.json |-babel.config.js |-package-lock.json `-package.json ===== A Sign komponens ===== import SignatureScreen from 'react-native-signature-canvas'; const Sign = () => { return ( ); } export default Sign; ===== Beépítés a fő komponensbe ===== import Sign from './Sign'; //... Teljes kód: import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View } from 'react-native'; import Sign from './Sign'; export default function App() { return ( Aláírás ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, }); ===== Eredmény ===== {{:oktatas:telefon:react_native:sing-canvas.png|}} A képernyő felső részén írhatunk és a "Clear" gombbal törölhetjük. ===== Eseménykezelés ===== Kezelhető események: | onOK | Az aláírás kész | | onEnd | Egy vonal be lett fejezve | | onEmpty | Aláírás nélkül megerősítés | | onClear | Az aláírás törölve | | onBegin | Vonal kezdése | Legyen egy handleSignature() függvény, amivel reagálunk az onOK eseményre. const handleSignature = (signature) => { console.log('Valami') } JSX-ben adjunk a SignatureScreen elemhez egy "onOK" attribútumot, értéke pedig a handleSignature legyen. A teljes kód: import SignatureScreen from 'react-native-signature-canvas'; const Sign = () => { const handleSignature = (signature) => { console.log('Valami') } return ( ); } export default Sign; Javítsuk a handleSignature() függvényt. const handleSignature = (signature) => { console.log(signature) } ===== Tulajdonságok ===== | autoClear={false} | Ne legyen törlés | | imageType={'image/png'} | Kimeneti kép típusa | | webStyle={``} | Stílus meghatározása | Webstílus: webStyle={` .m-signature-pad--footer { background-color: lightblue; color: black; padding: 30px; }` } ===== Lábléc feliratai ===== import SignatureScreen from 'react-native-signature-canvas'; const Sign = ({onSign}) => { const handleSignature = (signature) => { onSign(signature) } return ( ); } export default Sign; ===== Képet az App főkomponensben ===== import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View } from 'react-native'; import Sign from './Sign'; import { useState } from 'react'; export default function App() { const [signature, setSignature] = useState(); return ( Aláírás { setSignature(img) console.log('A képe átvéve') }} /> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, }); import SignatureScreen from 'react-native-signature-canvas'; const Sign = ({onSign}) => { const handleSignature = (signature) => { onSign(signature) } return ( ); } export default Sign; ===== Kép megjelenítése ===== import { StatusBar } from 'expo-status-bar'; import { Image, StyleSheet, Text, View } from 'react-native'; import Sign from './Sign'; import { useState } from 'react'; export default function App() { const [signature, setSignature] = useState(); return ( Aláírás { setSignature(img) console.log('A képe átvéve') }} /> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, }); ===== Kép láthatósága ===== import { StatusBar } from 'expo-status-bar'; import { Image, StyleSheet, Text, View } from 'react-native'; import Sign from './Sign'; import { useState } from 'react'; export default function App() { const [signature, setSignature] = useState(); return ( Aláírás { setSignature(img) console.log('A képe átvéve') }} /> {signature ? ( ) : null} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, }); ===== Linkek ===== * https://github.com/YanYuanFE/react-native-signature-canvas#readme (2023) * https://blog.openreplay.com/setting-up-a-signature-canvas-in-react-native/ (2023) * https://morioh.com/p/d722bced8655 (2023)