← All languages
React Native
Mobile wallets and dApp clients.
Theory — 50 written topics
Prefer to read first? The written React Native topics and their multiple-choice questions now live under the Learn tab.
Open React Native theory →Easy
Lessons 1-20 — fundamentals
- 1. Merging stylesCombine style objects like RN's array-style prop.
- 2. Flex row totalsSum flex values to check a row layout.
- 3. Platform.select logicRecreate the Platform.select pattern as a plain function.
- 4. FlatList keyExtractorWrite a stable key extractor for transaction data.
- 5. Shortening addressesA classic mobile wallet UI helper.
- 6. Modeling useState updatesSimulate a state-setter function without React.
- 7. Sanitizing decimal inputClean TextInput text for a numeric field.
- 8. Resolving image sourcesDecide between a local asset id and a remote URI.
- 9. Applying safe-area insetsCompute padding from safe-area insets.
- 10. Namespacing storage keysAvoid key collisions in AsyncStorage.
- 11. Loading/data/error stateModel the three states of a fetch.
- 12. Context default valueMerge a context default with a provided value.
- 13. usePrevious logicThe core comparison behind a usePrevious hook.
- 14. Guarding numeric && renderingAvoid the classic `{0 && <X/>}` bug.
- 15. Selecting environment configPick RPC config per environment.
- 16. Filtering debug logsA tiny logger used for debugging Metro output.
- 17. Formatting token balancesTurn raw integer units into a display string.
- 18. Parsing a deep linkExtract a transaction hash from a custom URL scheme.
- 19. Building a notification payloadCompose a title/body for a confirmed transaction.
- 20. Redacting secrets before loggingNever log a private key or seed.
Medium
Lessons 21-37 — patterns and real code
- 21. useReducer for a send formModel send-form state transitions.
- 22. Memoization-friendly totalsWrite a pure function suitable for useMemo.
- 23. Stable callback identity checkSimulate useCallback's dependency comparison.
- 24. Validating a send formReturn per-field validation errors.
- 25. Queuing modal confirmationsEnsure only one modal shows at a time.
- 26. Interpolating an animated valueReimplement Animated's interpolate logic linearly.
- 27. Matching a linking route patternMap a deep link URL to a screen + params.
- 28. Contextual permission requestsDecide when to prompt for notification permission.
- 29. Gating secret access with biometricsOnly reveal a secret after successful auth.
- 30. Formatting a WalletConnect approval summaryShow the user exactly what they're about to sign.
- 31. Formatting a signed transaction hashPrepare a tx hash for display after signing.
- 32. A unit-testable formatterWrite logic the way you would test it directly, no rendering needed.
- 33. Detecting prop changes causing re-rendersSimulate a shallow prop comparison like React.memo.
- 34. Queuing actions while offlineBuffer user actions until connectivity returns.
- 35. Locale-aware currency formattingUse Intl to format a fiat value.
- 36. Error boundary state transitionModel getDerivedStateFromError without a class.
- 37. Comparing app versions for release gatingDecide whether to force an update before store submission checks.
Hard
Lessons 38-50 — advanced and capstone
- 38. Wrapping a native module callAdapt a callback-style native bridge call to a Promise.
- 39. BigInt precision for wei mathAvoid floating-point error in on-chain amounts.
- 40. Simulating TurboModule lazy loadingOnly initialize a module the first time it's needed.
- 41. Selector-based store subscriptionsSimulate Zustand-style selective subscriptions.
- 42. Multi-chain config lookupBuild a block-explorer URL from chain config.
- 43. Managing a pending transaction queueEnqueue and update pending transactions immutably.
- 44. Gas estimation bufferingAdd a safety buffer to an estimated gas limit using BigInt.
- 45. Generating accessibility labelsBuild a clear screen-reader label for a send button.
- 46. Gating an OTA update rolloutStage a percentage rollout deterministically per user.
- 47. Clamping a gesture-driven shared valueReimplement Reanimated's clamp used in a pan gesture.
- 48. A cross-platform shared formatterWrite logic usable by both the RN app and a web dApp.
- 49. Soft-warning security checksReturn a warning without blocking the user outright.
- 50. Capstone: bootstrapping wallet app stateAssemble persisted data into initial app state.