diff --git a/web/docs/guides/with-expo.mdx b/web/docs/guides/with-expo.mdx index 974cd2eebf3..fb0c0b18ce1 100644 --- a/web/docs/guides/with-expo.mdx +++ b/web/docs/guides/with-expo.mdx @@ -1,13 +1,13 @@ --- id: with-expo -title: "Quickstart: Expo" +title: 'Quickstart: Expo' description: Learn how to use Supabase in your React Native App. --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' -## Intro +## Intro This example provides the steps to build a simple user management app (from scratch!) using Supabase and React Native. It includes: @@ -21,20 +21,19 @@ By the end of this guide you'll have an app which allows users to login and upda ## Project set up -Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase +Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase and then creating a "schema" inside the database. -### Create a project +### Create a project 1. Go to [app.supabase.io](https://app.supabase.io). 1. Click on "New Project". 1. Enter your project details. 1. Wait for the new database to launch. - ### Set up the database schema -Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, +Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, or you can just copy/paste the SQL from below and run it yourself. - + @@ -110,11 +109,9 @@ create policy "Anyone can upload an avatar." +### Get the API Keys -### Get the API Keys - - -Now that you've created some database tables, you are ready to insert data using the auto-generated API. +Now that you've created some database tables, you are ready to insert data using the auto-generated API. We just need to get the URL and `anon` key from the API settings. - + @@ -144,7 +141,7 @@ Let's start building the React Native app from scratch. ### Initialize a React Native app -We can use [`expo`](https://docs.expo.dev/get-started/create-a-new-app/) to initialize +We can use [`expo`](https://docs.expo.dev/get-started/create-a-new-app/) to initialize an app called `supabaseReactNative`: ```bash @@ -160,32 +157,36 @@ Then let's install the additional dependencies: [supabase-js](https://github.com yarn add @supabase/supabase-js yarn add react-native-elements yarn add react-native-safe-area-context +yarn add @react-native-async-storage/async-storage ``` Now let's create a helper file to initialize the Supabase client. We need the API URL and the `anon` key that you copied [earlier](#get-the-api-keys). -These variables will be exposed on the browser, and that's completely fine since we have +These variables will be exposed on the browser, and that's completely fine since we have [Row Level Security](/docs/guides/auth#row-level-security) enabled on our Database. ```js title="lib/supabase.js" +import AsyncStorage from '@react-native-async-storage/async-storage' import { createClient } from '@supabase/supabase-js' const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY -export const supabase = createClient(supabaseUrl, supabaseAnonKey) +export const supabase = createClient(supabaseUrl, supabaseAnonKey, { + localStorage: AsyncStorage, +}) ``` ### Set up a Login component -Let's set up a React Native component to manage logins and sign ups. +Let's set up a React Native component to manage logins and sign ups. Users would be able to sign in with their email and password. ```jsx title="components/Auth.js" -import React, {useState} from 'react' -import {Alert, StyleSheet, View} from 'react-native' -import {supabase} from '../lib/supabase' -import {Button, Input} from 'react-native-elements' +import React, { useState } from 'react' +import { Alert, StyleSheet, View } from 'react-native' +import { supabase } from '../lib/supabase' +import { Button, Input } from 'react-native-elements' export default function Auth() { const [email, setEmail] = useState('') @@ -211,8 +212,8 @@ export default function Auth() { setEmail(text)} + leftIcon={{ type: 'font-awesome', name: 'envelope' }} + onChangeText={(text) => setEmail(text)} value={email} placeholder="email@address.com" autoCapitalize={'none'} @@ -221,8 +222,8 @@ export default function Auth() { setPassword(text)} + leftIcon={{ type: 'font-awesome', name: 'lock' }} + onChangeText={(text) => setPassword(text)} value={password} secureTextEntry={true} placeholder="Password" @@ -230,19 +231,13 @@ export default function Auth() { /> -