React Native dan Solana
React Native adalah kerangka kerja perangkat lunak UI sumber terbuka yang digunakan untuk mengembangkan aplikasi mobile, web, dan desktop dengan memungkinkan pengembang menggunakan kerangka kerja React bersama dengan kemampuan platform native. Didukung dengan Solana SDK, ini adalah platform hebat untuk dengan cepat membangun aplikasi Crypto native yang berkinerja baik.
Cara tercepat untuk memulai dengan React Native dan Solana adalah dengan menggunakan Solana DApp Scaffold untuk React Native.
Cara Pakai @solana/web3.js di React Native app
Dalam tutorial ini Anda akan belajar cara membuat aplikasi React Native baru dan menginstal dan mengonfigurasi SDK @solana/web3.js
, dan dependensinya.
Jika Anda sudah memiliki aplikasi, lewati ke instalasi dependensi.
Buat aplikasi baru
Kita memulai aplikasi React Native baru yang menggunakan TypeScript, lalu cd
ke direktori proyek, di mana kita akan mengeksekusi sisa perintah.
npx react-native init SolanaReactNative --template react-native-template-typescript
cd SolanaReactNative
Install dependensi
Selanjutnya, kita menginstal dependensi. kita menginstal Solana SDK, dan sebagai tambahan kita menginstal sebuah paket untuk menambal konfigurasi metro
, dan dua polyfill yang menambal lingkungan React Native.
yarn add @solana/web3.js metro-config react-native-get-random-values react-native-url-polyfill
index.js
Update Untuk load polyfills, kita buka file index.js
di root proyek dan tambahkan 2 baris berikut di bagian paling atas file:
import 'react-native-get-random-values';
import 'react-native-url-polyfill/auto';
metro.config.js
Update Di step ini, kita akan konfigurasi metro
, jadi ini akan load files dengan ekstensi cjs
.
Buka file metro.config.js
root proyek dan replace isinya dengan snippet berikut:
const {getDefaultConfig} = require('metro-config');
module.exports = async () => {
const {
resolver: {sourceExts},
} = await getDefaultConfig();
return {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
resolver: {
sourceExts: [...sourceExts, 'cjs', 'svg'],
},
};
};
App.tsx
Update Mari tambahkan web3.js ke contoh aplikasi kita!
Buka file App.tsx
dan tambahkan code berikut di dalam fungsi App
:
Dalam contoh ini, kita menyiapkan koneksi ke Solana Devnet dan ketika komponen dimuat, kita mendapatkan versi cluster yang kita hubungkan dan menyimpan versi dalam status komponen.
Selain itu, contoh ini menunjukkan cara membuat dan menyimpan keypair.
const conn = new Connection(clusterApiUrl('devnet'));
const [version, setVersion] = useState<any>('');
const [keypair, setKeypair] = useState<Keypair>(() => Keypair.generate());
const randomKeypair = () => {
setKeypair(() => Keypair.generate());
};
useEffect(() => {
if (version) {
return;
}
conn.getVersion().then(r => setVersion(r));
}, [version, setVersion]);
Terakhir, di dalam template (atau render function
) tambahkan markup berikut:
{version ? (
<Section title="Version">{JSON.stringify(version, null, 2)}</Section>
) : null}
{keypair ? (
<Section title="Keypair">{JSON.stringify(keypair?.publicKey?.toBase58(), null, 2)}</Section>
) : null}
<Button title="New Keypair" onPress={randomKeypair} />
Install cocoapods
Agar polyfills bisa berfungsi, kita harus install cocoapods
.
cd ios && pod install
Start aplikasi
Setelah semua selesai, kita bisa start aplikasi kita:
npx react-native run-ios
Jika semuanya berjalan dengan baik, Anda akan melihat aplikasi React Native sedang dimulai di simulator iOS Anda yang mengambil versi Solana Devnet.
Solana DApp Scaffold untuk React Native
Jika Anda ingin memulai, Anda dapat mengunduh Solana DApp Scaffold untuk React Native.
Isu Umum ketika menggunakan @solana/web3.js di aplikasi React Native
Error: While trying to resolve module superstruct from file
error: Error: While trying to resolve module superstruct from file .../SolanaReactNative/node_modules/@solana/web3.js/lib/index.browser.cjs.js, the package .../SolanaReactNative/node_modules/superstruct/package.json was successfully found. However, this package itself specifies a main module field that could not be resolved (.../SolanaReactNative/node_modules/superstruct/lib/index.cjs.
Ini adalah masalah karena metro
, bundler React Native, tidak mendukung ekstensi cjs
secara default. ada issue disini.
Anda dapat memperbaikinya dengan memperbarui metro.config.js
dan menambahkan cjs
ke array resolver.sourceExts
, seperti yang ditunjukkan di atas.
Error: URL.protocol is not implemented
ERROR Error: URL.protocol is not implemented
ERROR Invariant Violation: Module AppRegistry is not a registered callable module (calling runApplication). A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.
Ini adalah masalah yang dapat diperbaiki dengan menggunakan polyfill untuk objek URL
di React Native.
Instal paket react-native-url-polyfill
dan impor dalam file utama aplikasi Anda (misalnya: index.js
), seperti yang ditunjukkan di atas.
Error: crypto.getRandomValues() not supported
Error: crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported
Ini adalah masalah yang dapat diperbaiki dengan menggunakan polyfill untuk objek crypto
di React Native.
Instal paket react-native-get-random-values
dan impor dalam file utama aplikasi Anda (misalnya: index.js
), seperti yang ditunjukkan.