bu yazımda yine React Native ile state object kullanırken bir önceki state değerini kontrol etmeyi inceleyeceğiz. Yine product objesi üzerinden örnekler yapılacaktır. Bu kez itemCount değeri değil price değeri hem ClassComponent yapısıyla hemde Hooks yapısıyla güncellenecektir.
ÖRNEK Product Objesi :
{title: 'iPhone 11',itemCount: 2,price: 1500}
ProductPriceValue ve ProductPriceValueHooks componentleri ile örnek açıklanmıştır. Github üzerinde bu componentleri inceleyebilirsiniz.
Aşağıdaki adımları takip ederek kendi projenizde uygulayabilirsiniz.
ilk olarak react native ile bir proje oluşturun.
$ react-native init someProject
|
Terminal üzerinden projenin bulunduğu dizine gidin.
$ cd someProject
|
kök dizindeki App.js dosyasının içeriğini aşağıdaki şekilde güncelleyin
import React, {Component, useState} from 'react'; import {Routes} from 'appEnum'; import {StyleSheet, Text, View} from 'react-native'; import {AppButton} from 'appComponent/Button'; export default class App extends Component { render() { return ( <> <ProductPriceValue /> <ProductPriceValueHooks /> </> ); } } export class ProductPriceValue extends Component { constructor(props) { super(props); this.state = { title: 'iPhone 11', itemCount: 2, price: 1500, }; } handlePriceChange = () => { this.setState((prevState, props) => { console.warn('prevState : ', prevState); return { price: prevState.price + 101, }; }); }; render() { return ( <View style={styles.container}> <Text style={styles.paragraph2}> state : {JSON.stringify(this.state)} </Text> <AppButton style={{marginTop: 10}} title="increase item count" onBtnPress={() => this.handlePriceChange()} /> </View> ); } } export const ProductPriceValueHooks = props => { const [state, setState] = useState({ title: 'iPhone 11', itemCount: 2, price: 1500, }); const handlePriceChange = () => { setState(prevState => { console.warn('prevState : ', prevState); return {...prevState, price: prevState.price + 100}; }); }; return ( <View style={styles.container}> <Text style={styles.paragraph1}>state : {JSON.stringify(state)}</Text> <AppButton style={{marginTop: 10}} title="increase item count" onBtnPress={() => handlePriceChange()} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, margin: 10, }, input: {height: 40, borderWidth: 1, marginBottom: 10}, paragraph1: { margin: 24, fontSize: 18, fontWeight: 'bold', textAlign: 'center', color: 'blue', }, paragraph2: { margin: 24, fontSize: 18, fontWeight: 'bold', textAlign: 'center', }, }); |
açıklamalar :
- ClassComponent yapısında setState methoduna parametre olarak geçilen bir fonksiyon ile prevState değeri alınabilmektedir.
- Üstteki örnekte prevState değeri alındıktan sonra price güncellenerek yeni değer state'e kaydedilmiştir.
- ClassComponent yapısında setState methoduna parametre olarak fonksiyon geçilerek prevState ile birlikte props değeri de alınabilmektedir.
- const [state, setState] = useState();
- Hooks yapısında useState ten alınan setState fonksiyonuna parametre olarak fonksiyon geçerek mevcut state değerlerine erişilebilir.
- Bu sayede üstteki örnekte eski değere 100 ekleyerek product price güncellenmektedir.
- ÖRN: setState(prevState => {return {...prevState, price: prevState.price + 100};});
github(state) : https://github.com/lvntyldz/tutorials/tree/6-react-hooks-prevstate/react-native-hooks-examples
github(projenin tamamı) : https://github.com/lvntyldz/tutorials/tree/master/react-native-hooks-examples
Hiç yorum yok:
Yorum Gönder