Giter VIP home page Giter VIP logo

react-native-bootcamp's Introduction

React Native Bootcamp — A Curriculum for Beginners

A series of React Native coding challenges with a variety of difficulties for busy developers.

I do react-native as a freelance since 2017 and I have 15+ years of experience shipping products with JavaScript. This bootcamp encapsulates all the problems I encounter in my daily job and all the things I wish I knew before starting my career as a React Native Developer.

My project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.

📱 Hearty thanks to the team behind expo, the open-source platform for making universal native apps with React that run on Android, iOS, and the web.

🎨 Thanks as well to all the react-native-paper contributors for their easy to use UI library.

🙏 Special thanks to Alex Lobera, Horacio Herrera, William Candillon, Satyajit Sahoo, Tanner Linsley, Brent Vatne.


Getting Started

Students, to follow this bootcamp, you need to complete the onboarding form.

Challenge after challenge, you are going to build this mobile appliction to buy Star Wars space ships using TypeScript, expo, react-native and react-query.

To support my work, I recommend downloading my React Native Book about the ecosystem.

Pedagogy

I have chosen two pedagogical tenets while building this curriculum: ensuring that it is hands-on project-based, with up-to-date dependencies and that it includes frequent quizzes. In addition, this curriculum has a common theme —create a mobile app with real API— to give it cohesion.

If you encounter an issue, feel free to contribute, I welcome your constructive feedback!

Each lesson includes

  • lecture
  • written lesson
  • step-by-step guides
  • a challenge
  • bonus challenges

Projects

A list of projects done during the hackathon day:

  1. spacecraft with react-query
  2. newsfeed with getstream API
  3. jimmy-punchline with genius API
  4. nerd-fm with expo-av to play music
  5. and more

Community

💬 Join us on Slack to discuss.

⭐️ Help us out by starring on GitHub, filing bug reports in issues with questions or proposals.

👥 Follow flexbox_ on Twitter for more updates.

Was this helpful?

☕️ Leaving a tip helps me a lot!

react-native-bootcamp's People

Contributors

cyrilperard avatar flexbox avatar imgbotapp avatar matthysdev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

react-native-bootcamp's Issues

CodeScanner: Laurent

Application de Scanner de code-barres

En tant que utilisateur
Je souhaite scanner un code barre
Afin d'avoir le contenu du code barre

--

--

VirtualizedLists on HomeScreen


VirtualizedLists should never be nested inside plain ScrollViews with the same orientation because it can break windowing and other functionality - use another VirtualizedList-backed container instead.
at node_modules/react-native/Libraries/Lists/VirtualizedList.js:1115:14 in ScrollView.Context.Consumer.props.children
at node_modules/react-query/lib/core/notifyManager.js:75:8 in <anonymous>
 

Setup

Setup project

  • expo new with TypeScript
  • add eslint-config-react-native-wcandillon
  • add react-native-paper
  • #52
  • #53

add `ScreenContainer` and drop `AppLayout`

During the bootcamp someone said:

WTF is AppLayout

It's confusing, refactor to this API

type Props = {
  title: string;
  scrollable: boolean;
  style?: StyleProp<ViewStyle>;
  children?: React.ReactNode;
  withFooter?: boolean;
};

Usage:

<ScreenContainer scrollable={false}>
   ...
</ScreenContainer>

Example ScreenContainer.tsx


  • update challenges
  • update code

Ecosystem

Drop this and test

    // [
    //   "module-resolver",
    //   {
    //     root: ["./app"],
    //     extensions: [".ts", ".tsx", ".js", ".jsx", ".json"],
    //   },
    // ],

Discotify: Martin

Application musicale

En tant que propriétaire de vinyle
Je souhaite ajouter un vinylle à mes favoris
Afin d'avoir accès à ma collection virtuelle

--

--

  • Créer une liste data.ts
interface VinylsProps {
  title: string
  artist: string
  image_url: string
  id: number
  date: string
}

export const allVinyls: VinylsProps[] = [
  {
    title: "From Mars to Sirius",
    artist: "Gojira",
    image_url: "https://m.media-amazon.com/images/I/91+7DKyZFmL._SS500_PIPJStripe-Robin-Large-V2,TopLeft,0,0_.jpg",
    id: 3245346,
    date: "Wed Feb 24 2021 09:56:19 GMT+0100 (Central European Standard Time)",
  },
  {
    title: "Dark side of the Moon",
    artist: 'Pink Floyd',
    image_url: "https://m.media-amazon.com/images/I/61Vs6BCeDHL._SS500_PIPJStripe-Robin-Large-V2,TopLeft,0,0_.jpg",
    id: 3245346,
    date: "Wed Feb 24 2021 09:56:19 GMT+0100 (Central European Standard Time)",
  },
  {
    title: "Les Sardines",
    artist: 'Patrick Sebastien',
    image_url:"https://m.media-amazon.com/images/I/81iGNNceqnL._SS500_.jpg",
    id: 3245346,
    date: "Wed Feb 24 2021 09:56:19 GMT+0100 (Central European Standard Time)",
  }
]

  • HomeScreen la liste de tous les allvinyls.json
  • CollectionScreen ma collection

Better nerd-fm app

As a user
I can sign in
So that I have a custom experience


  • Add SignUpScreen - SignInScreen
  • Update Routes
  • Test on iOS
  • Test on Android

Ecosystem logos

Example https://patak.dev/vite/ecosystem.html

Logos list

  • VScode
  • ESlint
  • Prettier
  • Storybook
  • Jest
  • @testing-library/react-native
  • TypeScript
  • React Native
  • Babel
  • react-query

Work to do

  • include the logo in the challenges
  • Add all the logos in one place on Figma next.davidl.fr > React Native Bootcamp

Application mobile Atlas

Application mobile d'alerte avec historique.

Fonctionnalités

  • Onboarding
  • PermissionsScreen
  • SignIn - PasswordScreen
    • Products
      • ProductDetails - State - History - Settings
    • Ajouter un product
      • Scan QR Code
    • Historique
    • Profil
      • Contact Team

Outils

TODO

Librairie Auth
https://auth0.com
https://sandbox.amplifyapp.com
https://firebase.google.com

Librairie + server PushNotifications

  1. Coté client
    https://docs.expo.io/push-notifications/overview/

  2. Coté serveur
    https://docs.expo.io/push-notifications/sending-notifications/
    Firebase
    Amplify

SLIDE: testing

it("works", () => {
  expect(1).toBe(1);
});
  • on package.json
    "test": "jest",
    "test:unit:watch": "jest --watch",
  • test with yarn test:unit
  • add your first test on src/components/StarshipCard.test.tsx
  • Test if title, cost ... are presents
  • test with yarn test:unit:watch
import React from "react";

import { render } from "testing-library";
import { StarshipCard } from "~/components/StarshipCard";

const shipFixture = {
...
}

describe("StarshipCard", () => {
  it("renders correctly", () => {
    const { getByText, debug } = render(
      <StarshipCard ship={shipFixture} />
    );
    debug() <----- just to test
    getByText("Star Destroyer");
    getByText("150000000 credits");
  });
});

Updating Jest setup

Testing code using React Navigation takes some setup since we need to mock some native dependencies used in the navigators.

Issue with /workshop/challenges/foundation-01

image
image

Il y a un bug, nous pouvons compléter plusieurs fois le même exercice est donc faire augmenter le pourcentage sans compléter les autres.

Comme vous pouvez le voir avec les screens, il me reste au moins 6 exercices et pourtant on me dit que j'en ai réalisé 15 sur 19.

Issue with /workshop

In React Navigation section : 2. Styling navigators and 3. Passing datas though Screens label are inverted

DATA: migrating to React Query 4

As a developer
I can use the last version of react-query
So that I don't waste time looking for documentation


Edit: v4 released! https://tanstack.com/query/v4/docs/guides/migrating-to-react-query-4


Double-check what could be improved with isFocused hook https://medium.com/@nawfalhaddi/challenges-of-using-react-query-v3-with-react-native-cae2ac16aed0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.