# Hari 23: Dasar React Native

Pada dasarnya react native sama dengan react js sama-sama dalam bentuk component, cara penulisan juga sama. Anda perlu tahu component, props, state, hooks untuk lanjut jika belum maka silahkan baca materi react pada minggu sebelumnya [disini](https://asrul.dev/hari-16-react-kenalan)

### Hello World!

Ini adalah tradisi yang turun temurun, saat pertamakali belajar hal baru dalam koding biasanya dengan menampilkan ~~Hello World!~~ jadi **Hello Asrul Dev**. Langsung saja mari tulis kode berikut pada file `App.js`.

```jsx
import React from "react";
import { View, Text } from "react-native";

const App = () => {
  return (
    <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
      <Text style={{ color: "blue", fontSize: 32 }}>Hello Asrul Dev</Text>
    </View>
  );
};

export default App;
```

Hasilnya akan terlihat seperti berikut.

![Halo Asrul dev](https://raw.githubusercontent.com/AsrulLove/img-db/master/halo-asrul-dev.png)

> Terlihat jelas pada kode diatas, jika pada web kita menggunakan `<div>` maka pada react native kita menggunakan `<View>`, begitu juga penggunaan `<p>, <h1>, ... atau <span>` menjadi `<Text>` pada react native.

### Style

Desain yang bagus bisa menjadi daya tarik untuk menggunakan aplikasi, maka materi ini saya anggap penting. Style pada react native mirip dengan css pada web tapi dalam bentuk kode object javascript.

React native telah menyediakan `StyleSheet` yang dapat kita gunakan untuk kumpulan style kode yang dimiliki. Sebelumnya terlihat bahwa saya telah memperlihatkan style pada `<View>` dan `<Text>`, dengan menggunakan StyleSheet maka kode akan terlihat lebih rapi.

```jsx
import React from "react";
import { View, Text, StyleSheet } from "react-native";

const App = () => {
  return (
    <View style={styles.AllCenter}>
      <Text style={styles.textDemo}>Hello Asrul Dev</Text>
    </View>
  );
};

export default App;

const styles = StyleSheet.create({
  AllCenter: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
  },
  textDemo: {
    color: "blue",
    fontSize: 32,
  },
});
```

### Layout

Pada react native, layout menggunakan konsep flex yang dapat dibaca [disini](https://facebook.github.io/react-native/docs/flexbox)

### Text Input

Jika pada html ada `<input type="text" />` maka gantinya pada react native adalah `<TextInput />`. Perhatikan contoh berikut.

```js
import React, { useState } from "react";
import { View, Text, StyleSheet, TextInput } from "react-native";

const App = () => {
  const [teks, updateTeks] = useState("");
  return (
    <View style={styles.AllCenter}>
      <Text style={styles.textDemo}>Hello Asrul Dev</Text>

      <TextInput
        style={styles.inputHope}
        placeholder="Tulis apapun"
        onChangeText={(text) => updateTeks(text)}
        value={teks}
      />
    </View>
  );
};

export default App;

const styles = StyleSheet.create({
  AllCenter: {
    flex: 1,
    padding: 10,
    alignItems: "center",
    justifyContent: "center",
  },
  textDemo: {
    color: "blue",
    fontSize: 32,
  },
  inputHope: {
    height: 40,
    borderColor: "gray",
    borderWidth: 1,
    width: "100%",
  },
});
```

Hasilnya akan seperti berikut.

![React Native Input](https://raw.githubusercontent.com/AsrulLove/img-db/master/text-input.png)

### Button

Intraksi pada mobile akan sering berhubungan dengan yang namanya sentuh untuk melakukan interaksi, biasanya untuk pindah halaman atau lainnya. Button merupakan salah satu bentuk interaksi tersebut. Button pada react native dapat dilihat pada contoh berikut.

```jsx
import React, { useState } from "react";
import { View, Text, StyleSheet, TextInput, Button } from "react-native";

const App = () => {
  const [teks, updateTeks] = useState("");
  return (
    <View style={styles.AllCenter}>
      <Text style={styles.textDemo}>Hello Asrul Dev</Text>

      <TextInput
        style={styles.inputHope}
        placeholder="Tulis apapun"
        onChangeText={(text) => updateTeks(text)}
        value={teks}
      />
      <View style={styles.fullButton}>
        <Button onPress={() => alert(teks)} title="Sentuh Aku" />
      </View>
    </View>
  );
};

export default App;

const styles = StyleSheet.create({
  AllCenter: {
    flex: 1,
    padding: 10,
    alignItems: "center",
    justifyContent: "center",
  },
  textDemo: {
    color: "blue",
    fontSize: 32,
  },
  inputHope: {
    height: 40,
    borderColor: "gray",
    borderWidth: 1,
    width: "100%",
  },
  fullButton: {
    height: 40,
    width: "100%",
    marginTop: 8,
  },
});
```

Hasilnya akan seperti berikut.

![React Native Button](https://raw.githubusercontent.com/AsrulLove/img-db/master/button-react-native.png)

### ScrollView

Aplikasi mobile memiliki ruang yang sempit, sehingga scroll akan sangat membantu untuk tampilan yang panjang. Berikut penggunaan ScrollView pada react native.

```jsx
import React, { useState } from "react";
import {
  View,
  Text,
  StyleSheet,
  TextInput,
  Button,
  ScrollView,
  Image,
} from "react-native";

const App = () => {
  const [teks, updateTeks] = useState("");
  return (
    <ScrollView>
      <View style={styles.AllCenter}>
        <Text style={styles.textDemo}>Hello Asrul Dev</Text>

        <TextInput
          style={styles.inputHope}
          placeholder="Tulis apapun"
          onChangeText={(text) => updateTeks(text)}
          value={teks}
        />
        <View style={styles.fullButton}>
          <Button onPress={() => alert(teks)} title="Sentuh Aku" />
        </View>
      </View>

      <View style={styles.AllCenter}>
        <Image
          source={{
            uri: "https://avatars2.githubusercontent.com/u/15111402?s=460&v=4",
            width: 200,
            height: 200,
          }}
          style={{ marginTop: 8 }}
        />
        <Image
          source={{
            uri: "https://avatars2.githubusercontent.com/u/38931702?s=460&v=4",
            width: 200,
            height: 200,
          }}
          style={{ marginTop: 8 }}
        />
        <Image
          source={{
            uri: "https://avatars0.githubusercontent.com/u/51555828?s=460&v=4",
            width: 200,
            height: 200,
          }}
          style={{ marginTop: 8 }}
        />
        <Image
          source={{
            uri: "https://avatars1.githubusercontent.com/u/44023987?s=460&v=4",
            width: 200,
            height: 200,
          }}
          style={{ marginTop: 8 }}
        />
      </View>
    </ScrollView>
  );
};

export default App;

const styles = StyleSheet.create({
  AllCenter: {
    flex: 1,
    padding: 10,
    alignItems: "center",
    justifyContent: "center",
  },
  textDemo: {
    color: "blue",
    fontSize: 32,
  },
  inputHope: {
    height: 40,
    borderColor: "gray",
    borderWidth: 1,
    width: "100%",
  },
  fullButton: {
    height: 40,
    width: "100%",
    marginTop: 8,
  },
});
```

Hasilnya akan seperti berikut.

![React Native Scrollview](https://raw.githubusercontent.com/AsrulLove/img-db/master/scrollview-react-native.gif)
