├── pages ├── zh-cn │ ├── core_components.mdx │ ├── config.json │ ├── javascript │ │ ├── features │ │ │ ├── config.json │ │ │ ├── spread.mdx │ │ │ ├── classes.mdx │ │ │ ├── async_and_await.mdx │ │ │ ├── variables.mdx │ │ │ ├── arrow_functions.mdx │ │ │ ├── destructuring.mdx │ │ │ └── imports_and_exports.mdx │ │ ├── features.mdx │ │ └── jsx.mdx │ ├── index.mdx │ ├── environment.mdx │ ├── environment │ │ └── quick_start.mdx │ └── javascript.mdx ├── app │ ├── gestures │ │ ├── config.json │ │ ├── gesture_handlers.mdx │ │ └── pan_responder.mdx │ ├── navigation │ │ ├── config.json │ │ ├── navigating_and_routes.mdx │ │ └── react_navigation.mdx │ ├── slides.js │ ├── config.json │ ├── gestures.mdx │ ├── animation.mdx │ ├── animation │ │ ├── reanimated.mdx │ │ └── animated.mdx │ ├── component_libraries.mdx │ ├── data_management │ │ └── usereducer.mdx │ ├── data_management.mdx │ ├── persistence.mdx │ ├── persistence │ │ └── asyncstorage.mdx │ ├── networking.mdx │ └── navigation.mdx ├── core_components │ ├── lists │ │ ├── config.json │ │ ├── flatlist.mdx │ │ └── sectionlist.mdx │ ├── touchables │ │ ├── config.json │ │ ├── touchable_highlight.mdx │ │ └── touchable_opacity.mdx │ ├── slides.js │ ├── config.json │ ├── text.mdx │ ├── button.mdx │ ├── scrollview.mdx │ ├── lists.mdx │ ├── view.mdx │ ├── touchables.mdx │ ├── image.mdx │ └── layout.mdx ├── react │ ├── components │ │ ├── config.json │ │ ├── class_components.mdx │ │ └── function_components.mdx │ ├── hooks │ │ ├── usecontext.mdx │ │ ├── config.json │ │ ├── useref.mdx │ │ ├── custom_hooks.mdx │ │ ├── usereducer.mdx │ │ ├── usestate.mdx │ │ └── useeffect.mdx │ ├── slides.js │ ├── config.json │ ├── events.mdx │ ├── user_input.mdx │ ├── hooks.mdx │ ├── performance.mdx │ ├── components.mdx │ ├── performance │ │ └── memo.mdx │ ├── elements.mdx │ └── conditional_rendering.mdx ├── exercises.mdx ├── javascript │ ├── slides.js │ ├── features │ │ ├── config.json │ │ ├── spread.mdx │ │ ├── classes.mdx │ │ ├── async_and_await.mdx │ │ ├── variables.mdx │ │ ├── destructuring.mdx │ │ ├── imports_and_exports.mdx │ │ └── arrow_functions.mdx │ ├── features.mdx │ └── jsx.mdx ├── config.json ├── playgrounds.js ├── 404.tsx ├── slides.js ├── intro_slides.js ├── core_components.mdx ├── react.mdx ├── _document.tsx ├── app.mdx ├── index.mdx ├── environment │ └── quick_start.mdx ├── environment.mdx ├── javascript.mdx └── exercises │ └── photo_gallery.mdx ├── custom.d.ts ├── examples ├── files │ ├── native_modules │ │ ├── viewSubclass.swift │ │ ├── viewSubclass.kt │ │ ├── MyView.m │ │ ├── MainApplication.java │ │ ├── viewManager.swift │ │ ├── Props.m │ │ ├── MyPackage.kt │ │ ├── viewManager.kt │ │ ├── Props.js │ │ ├── Props.swift │ │ ├── requireNativeComponent.js │ │ └── Props.kt │ ├── javascript │ │ ├── defaultImport.js │ │ ├── namedExports.js │ │ ├── namedImports.js │ │ ├── momentExample.js │ │ ├── destructuringArrays.js │ │ ├── destructuringObjects.js │ │ ├── constants.js │ │ ├── destructuringFunctionArguments.js │ │ ├── variables.js │ │ ├── arrowFunctions.js │ │ ├── constructor.js │ │ ├── spread.js │ │ ├── destructuringAdvanced.js │ │ └── fetch.js │ ├── jsx.js │ ├── navigation │ │ ├── route.js │ │ ├── screen.js │ │ ├── route.tsx │ │ ├── navigator.js │ │ ├── hooks.js │ │ ├── push.js │ │ ├── push.tsx │ │ ├── screen.tsx │ │ ├── navigator.tsx │ │ ├── hooks.tsx │ │ ├── render.tsx │ │ └── example.js │ ├── jsxChildren.js │ ├── environment │ │ └── appRegistry.js │ ├── animation │ │ ├── animatedValue.tsx │ │ ├── animatedView.tsx │ │ ├── animatedExample.tsx │ │ └── animatedInterpolate.tsx │ ├── react │ │ ├── reactElements.js │ │ ├── functionComponent.js │ │ ├── keyedList.js │ │ ├── nativeEvent.js │ │ ├── classComponent.js │ │ ├── unkeyedList.js │ │ ├── componentBehaviors.js │ │ ├── composingComponents.js │ │ ├── customEvent.js │ │ ├── ternaryEvaluation.js │ │ ├── shortCircuitAnd.js │ │ ├── typescriptTypes.tsx │ │ ├── userInput.js │ │ ├── memo.js │ │ ├── complexRendering.js │ │ ├── styledComponents.js │ │ └── inlineStyles.js │ ├── exercises │ │ ├── PhotoGrid1.js │ │ ├── picsum.js │ │ ├── defaultApp.js │ │ ├── PhotoGallery1.js │ │ ├── PhotoGrid.js │ │ ├── photos.js │ │ ├── PhotoGallery2.js │ │ └── PhotoGallery.js │ ├── core_components │ │ ├── image.js │ │ ├── text.js │ │ ├── view.js │ │ ├── button.js │ │ ├── flatlist.js │ │ ├── toggle.js │ │ ├── scrollview.js │ │ ├── touchableHighlight.js │ │ ├── touchableOpacity.js │ │ ├── sectionlistHomogenous.js │ │ ├── sectionlistHeterogenous.js │ │ └── flexbox.js │ ├── hooks │ │ ├── useEffectWithNoDeps.js │ │ ├── useEffectWithEmptyDeps.js │ │ ├── useEffect.js │ │ ├── useStateArray.js │ │ ├── useRef.js │ │ ├── useInterval.js │ │ └── useReducer.js │ ├── app │ │ ├── Title.js │ │ ├── Input.js │ │ ├── useAsyncStorage.js │ │ ├── TodoListWithReducer.js │ │ ├── posts.js │ │ ├── List.js │ │ ├── todos.js │ │ ├── AsyncStorage.js │ │ └── networking.js │ ├── helloWorld.js │ ├── gestures │ │ ├── panGestureHandler.tsx │ │ ├── pan.js │ │ ├── panResponder.js │ │ └── usePanResponder.js │ └── TodoListRedux.js └── modules │ └── index.js ├── images ├── expo.png ├── fsrn-book.png ├── fsrn-book@2x.png ├── createnativeapp.png └── logo.svg ├── next-env.d.ts ├── styles ├── theme.ts └── slidesTheme.ts ├── public └── static │ ├── logo.png │ ├── favicon.ico │ ├── favicon.png │ ├── logo@2x.png │ └── preview.png ├── .gitignore ├── slides ├── index.mdx └── intro.mdx ├── .babelrc ├── tsconfig.json ├── components ├── SectionSlideshow.tsx ├── SpectacleSlideshow.tsx ├── Disqus.tsx ├── FileTreeDiagram.tsx ├── BookBanner.tsx └── CommunityResources.tsx ├── README.md ├── utils ├── search.js └── legacyRoutes.ts ├── LICENSE ├── next.config.js └── package.json /pages/zh-cn/core_components.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 核心组件 3 | --- 4 | -------------------------------------------------------------------------------- /custom.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.png' 2 | declare module '*.svg' 3 | -------------------------------------------------------------------------------- /pages/zh-cn/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["environment", "javascript"] 3 | } 4 | -------------------------------------------------------------------------------- /examples/files/native_modules/viewSubclass.swift: -------------------------------------------------------------------------------- 1 | class MyView: UIView { 2 | // ... 3 | } 4 | -------------------------------------------------------------------------------- /images/expo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/images/expo.png -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /pages/app/gestures/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["pan_responder", "gesture_handlers"] 3 | } 4 | -------------------------------------------------------------------------------- /pages/core_components/lists/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["flatlist", "sectionlist"] 3 | } 4 | -------------------------------------------------------------------------------- /styles/theme.ts: -------------------------------------------------------------------------------- 1 | import { defaultTheme } from 'react-guidebook' 2 | 3 | export default defaultTheme 4 | -------------------------------------------------------------------------------- /images/fsrn-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/images/fsrn-book.png -------------------------------------------------------------------------------- /pages/app/navigation/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["react_navigation", "navigating_and_routes"] 3 | } 4 | -------------------------------------------------------------------------------- /pages/react/components/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["function_components", "class_components"] 3 | } 4 | -------------------------------------------------------------------------------- /public/static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/public/static/logo.png -------------------------------------------------------------------------------- /styles/slidesTheme.ts: -------------------------------------------------------------------------------- 1 | import { slidesTheme } from 'react-guidebook' 2 | 3 | export default slidesTheme 4 | -------------------------------------------------------------------------------- /examples/files/javascript/defaultImport.js: -------------------------------------------------------------------------------- 1 | import myNumber from './myNumber' 2 | 3 | console.log(myNumber) 4 | -------------------------------------------------------------------------------- /examples/files/jsx.js: -------------------------------------------------------------------------------- 1 | const element = ( 2 | 3 | 4 | 5 | 6 | ) 7 | -------------------------------------------------------------------------------- /images/fsrn-book@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/images/fsrn-book@2x.png -------------------------------------------------------------------------------- /pages/react/hooks/usecontext.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: useContext 3 | hidden: true 4 | --- 5 | 6 | Coming soon! 7 | -------------------------------------------------------------------------------- /examples/files/native_modules/viewSubclass.kt: -------------------------------------------------------------------------------- 1 | class MyView(context: Context?) : View(context) { 2 | // ... 3 | } 4 | -------------------------------------------------------------------------------- /images/createnativeapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/images/createnativeapp.png -------------------------------------------------------------------------------- /pages/core_components/touchables/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": ["touchable_opacity", "touchable_highlight"] 3 | } 4 | -------------------------------------------------------------------------------- /pages/exercises.mdx: -------------------------------------------------------------------------------- 1 | The following section contains exercises to practice what you learned throughout this guide. 2 | -------------------------------------------------------------------------------- /public/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/public/static/favicon.ico -------------------------------------------------------------------------------- /public/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/public/static/favicon.png -------------------------------------------------------------------------------- /public/static/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/public/static/logo@2x.png -------------------------------------------------------------------------------- /public/static/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dabbott/react-native-express/HEAD/public/static/preview.png -------------------------------------------------------------------------------- /examples/files/javascript/namedExports.js: -------------------------------------------------------------------------------- 1 | export const myNumber = 42 2 | 3 | export const myString = 'Hello, world!' 4 | -------------------------------------------------------------------------------- /examples/files/navigation/route.js: -------------------------------------------------------------------------------- 1 | const Screen2 = ({ route }) => { 2 | return {route.params.paramA} 3 | } 4 | -------------------------------------------------------------------------------- /examples/files/navigation/screen.js: -------------------------------------------------------------------------------- 1 | const Screen1 = ({ navigation, route }) => { 2 | return Screen1 3 | } 4 | -------------------------------------------------------------------------------- /examples/files/javascript/namedImports.js: -------------------------------------------------------------------------------- 1 | import { myNumber, myString } from './myValues' 2 | 3 | console.log(myNumber, myString) 4 | -------------------------------------------------------------------------------- /examples/files/javascript/momentExample.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | 3 | console.log(moment().format('MMMM Do YYYY, h:mm:ss a')) 4 | -------------------------------------------------------------------------------- /examples/files/navigation/route.tsx: -------------------------------------------------------------------------------- 1 | const Screen2 = ({ route }: Screen2Props) => { 2 | return {route.params.paramA} 3 | } 4 | -------------------------------------------------------------------------------- /examples/files/navigation/navigator.js: -------------------------------------------------------------------------------- 1 | import { createStackNavigator } from '@react-navigation/stack' 2 | 3 | const Root = createStackNavigator() 4 | -------------------------------------------------------------------------------- /examples/modules/index.js: -------------------------------------------------------------------------------- 1 | export const moment = [ 2 | 'moment', 3 | 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js', 4 | ] 5 | -------------------------------------------------------------------------------- /examples/files/javascript/destructuringArrays.js: -------------------------------------------------------------------------------- 1 | const myArray = [1, 2, 3] 2 | 3 | const [a, b, c] = myArray 4 | 5 | console.log(a, b, c) 6 | 7 | export {} 8 | -------------------------------------------------------------------------------- /examples/files/jsxChildren.js: -------------------------------------------------------------------------------- 1 | const myVariable = 2 | 3 | const element = ( 4 | 5 | 6 | {myVariable} 7 | 8 | ) 9 | -------------------------------------------------------------------------------- /pages/app/slides.js: -------------------------------------------------------------------------------- 1 | import SectionSlideshow from '../../components/SectionSlideshow' 2 | 3 | export default () => 4 | -------------------------------------------------------------------------------- /pages/react/slides.js: -------------------------------------------------------------------------------- 1 | import SectionSlideshow from '../../components/SectionSlideshow' 2 | 3 | export default () => 4 | -------------------------------------------------------------------------------- /pages/javascript/slides.js: -------------------------------------------------------------------------------- 1 | import SectionSlideshow from '../../components/SectionSlideshow' 2 | 3 | export default () => 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Project dependencies 4 | node_modules 5 | yarn-error.log 6 | .next 7 | 8 | # Build directory 9 | /out 10 | 11 | # Editors 12 | .vscode 13 | -------------------------------------------------------------------------------- /pages/core_components/slides.js: -------------------------------------------------------------------------------- 1 | import SectionSlideshow from '../../components/SectionSlideshow' 2 | 3 | export default () => 4 | -------------------------------------------------------------------------------- /examples/files/native_modules/MyView.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "React/RCTViewManager.h" 4 | 5 | @interface RCT_EXTERN_MODULE(MyViewManager, RCTViewManager) 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /pages/react/hooks/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": [ 3 | "usestate", 4 | "usereducer", 5 | "useeffect", 6 | "useref", 7 | "usecontext", 8 | "custom_hooks" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /examples/files/javascript/destructuringObjects.js: -------------------------------------------------------------------------------- 1 | const myObject = { 2 | name: 'Devin', 3 | age: 29, 4 | } 5 | 6 | const { name, age } = myObject 7 | 8 | console.log(name, age) 9 | 10 | export {} 11 | -------------------------------------------------------------------------------- /examples/files/environment/appRegistry.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import App from './App' 3 | import { name as appName } from './app.json' 4 | 5 | AppRegistry.registerComponent(appName, () => App) 6 | -------------------------------------------------------------------------------- /pages/core_components/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": [ 3 | "view", 4 | "layout", 5 | "text", 6 | "image", 7 | "button", 8 | "touchables", 9 | "scrollview", 10 | "lists" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /slides/index.mdx: -------------------------------------------------------------------------------- 1 | # React Native 2 | 3 | - [Intro](/intro_slides) 4 | - [JavaScript & JSX](/javascript/slides) 5 | - [React](/react/slides) 6 | - [Core Components](/core_components/slides) 7 | - [App Development](/app/slides) 8 | -------------------------------------------------------------------------------- /examples/files/navigation/hooks.js: -------------------------------------------------------------------------------- 1 | import { useNavigation, useRoute } from '@react-navigation/native' 2 | 3 | const Screen1 = () => { 4 | const navigation = useNavigation() 5 | const route = useRoute() 6 | 7 | // ... 8 | } 9 | -------------------------------------------------------------------------------- /examples/files/navigation/push.js: -------------------------------------------------------------------------------- 1 | const Screen1 = ({ navigation }) => { 2 | return ( 3 |