State management di React Native ada bermacam - macam, salah satu nya remx. Oh iya, sebelum lanjut saya mau jelaskan dulu kenapa saya beralih dari Mobx ke Remx, dan kenapa saya gak pake Redux seperti pada umumnya. Silakan baca ke post saya kesini. Ok, mungkin akan saya jelaskan lagi kenapa kita harus pake state management, dan apa kelebihannya daripada kita menyimpan data di local component state.
Baik, langsung saja kita coba implementasi menggunakan remx di app React Native kita. Pertama buka terminal dan masuk ke direktori project kita. Kemudian ketik berikut untuk instalasi nya
$ npm install remx
Kemudian bikin folder di root project nya, susunan nya seperti ini
projectKamu/src/store/user/index.js
Setelah itu pada file store index.js nya isikan sebagai berikut
import * as remx from 'remx';
const initialState = {
nama: 'Nusendra'
};
// inisialisasi state
const state = remx.state(initialState);
// getters berfungsi untuk get data
const getters = remx.getters({
getNama: () => state.nama
});
// setters untuk mengubah state
const setters = remx.setters({
setName: payload => state.nama = payload
});
export const store = {
...getters,
...setters
};
Untuk actions (berfungsi untuk asynchronous) kita buatkan file terpisah. Kita namakan saja actions.js
import {store} from './index';
export async function fetchData(){
const response = await fetch('http://url-api');
const result = await response.json();
store.setName(result.value);
}
Nah, store sudah beres. Sekarang kita pakai store nya di component. Misalkan kita pakai di App.js .
import { connect } from 'remx';
import { store } from '../store/user/index';
import * as actions from '../store/user/actions';
class Home extends Component {
gantiNama() {
actions.fetcData();
}
render() {
return (
<Container>
<Text>Hai, {this.props.selectedNama} ...</Text>
<TouchableOpacity onPress={() => { this.gantiNama() }}>
<Text>Ganti Nama</Text>
</TouchableOpacity>
</Container>
)
}
}
function mapStateToProps(ownProps) {
return {
selectedNama: store.getNama();
};
}
export default connect(mapStateToProps)(Home);
Penjelasan dari kode diatas adalah. Component Home tersebut akan menginjeksi data store kedalam nya, kemudian function mapStateToProps menginisialisasi value / state selectedNama dengan value yang ada di store, yakni nama. Kemudian data state nama tersebut di tampilkan di function render. Dalam function render tersebut, terdapat sebuah tombol yang jika di tekan akan mentrigger function gantiNama() dan berfungsi untuk menjalankan / dispatch actions store. Setelah itu actions store melakukan fetch data yang kemudian melakukan mutasi data dengan setter.
Bingung ya? haha. Oke begini alur nya
Simple kan? Semoga bermanfaat buat temen - temen pembaca. Kalau masih ada yang di bingungkan, jangan sungkan untuk bertanya di kolom komentar. Thanks …