DeviceDataModuleμ React Native μ ν리μΌμ΄μ
μ΄ λ€μ΄ν°λΈ λ°μ΄ν° μ μ₯μμ μ κ·Όν μ μλλ‘ μ€κ³λ λͺ¨λμ
λλ€. Androidμμλ SharedPreferencesλ₯Ό, iOSμμλ UserDefaultsλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό κ΄λ¦¬ν©λλ€. κΈ°μ‘΄ λ€μ΄ν°λΈ μ±μμ μ¬μ©νλ λ°μ΄ν°λ₯Ό Expo λͺ¨λμμ μ½κ±°λ μ¨μΌ ν λ μ μ©νλ©°, μ μ§μ μΈ μ± λ§μ΄κ·Έλ μ΄μ
μ λ°μ΄ν° 곡μ λ₯Ό μννκ² ν΄μ€λλ€.
μ£Όμ κΈ°λ₯μ κ° νλ«νΌμ λ€μ΄ν°λΈ μ μ₯μμ μ§μ μ κ·Όνμ¬ ν€-κ° λ°μ΄ν°λ₯Ό μ μ₯, μ‘°ν, μμ νλ κ²μ λλ€.
pnpm install device-data-moduleλλ
yarn add device-data-moduleλλ
npx expo install device-data-moduleμλ μμ λ DeviceDataModuleμ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ μ₯, μ‘°ν, μμ νλ λ°©λ²μ 보μ¬μ€λλ€.
import { useState } from 'react';
import DeviceDataModule from "device-data-module";
import { Button, SafeAreaView, ScrollView, Text, TextInput, View, StyleSheet } from "react-native";
export default function App() {
const [key, setKey] = useState('');
const [value, setValue] = useState('');
const [storedValue, setStoredValue] = useState<string | null>(null);
// μ£Όμ΄μ§ ν€λ‘ κ°μ μ μ₯ν©λλ€. (Android: SharedPreferences, iOS: UserDefaults)
const handleSetItem = async () => {
if (key && value) {
await DeviceDataModule.setItem(key, value);
alert(`${key} μ μ₯ μλ£!`);
}
};
// μ£Όμ΄μ§ ν€μ κ°μ κ°μ Έμ΅λλ€. (Android: SharedPreferences, iOS: UserDefaults)
const handleGetItem = async () => {
if (!key) return;
const result = await DeviceDataModule.getItem(key);
setStoredValue(result || 'κ°μ΄ μ‘΄μ¬νμ§ μμ΅λλ€');
};
// μ£Όμ΄μ§ ν€μ νλͺ©μ μμ ν©λλ€. (Android: SharedPreferences, iOS: UserDefaults)
const handleRemoveItem = async () => {
if (!key) return;
await DeviceDataModule.removeItem(key);
setStoredValue(null);
alert(`${key} μμ μλ£!`);
};
return (
<SafeAreaView style={styles.container}>
<ScrollView>
<Text style={styles.header}>Device Data Storage μμ </Text>
<View style={styles.inputGroup}>
<TextInput
style={styles.input}
placeholder="ν€ (Key)"
value={key}
onChangeText={setKey}
/>
<TextInput
style={styles.input}
placeholder="κ° (Value)"
value={value}
onChangeText={setValue}
/>
</View>
<View style={styles.buttonGroup}>
<Button title="κ° μ μ₯ (Set Item)" onPress={handleSetItem} />
<Button title="κ° μ‘°ν (Get Item)" onPress={handleGetItem} />
<Button title="κ° μμ (Remove Item)" onPress={handleRemoveItem} />
</View>
{storedValue && (
<View style={styles.resultContainer}>
<Text>μ μ₯λ κ°:</Text>
<Text>{storedValue}</Text>
</View>
)}
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: { flex: 1, padding: 20 },
header: { fontSize: 24, fontWeight: 'bold', marginBottom: 20 },
inputGroup: { marginBottom: 20 },
input: { borderWidth: 1, borderColor: '#ccc', padding: 10, marginBottom: 10 },
buttonGroup: { gap: 10, marginBottom: 20 },
resultContainer: { padding: 10, backgroundColor: '#eee' },
});μ§μ λ ν€(key)μ λ¬Έμμ΄ κ°(value)μ μ μ₯ν©λλ€.
key: μ μ₯ν λ°μ΄ν°μ ν€μ λλ€.value: μ μ₯ν λ°μ΄ν°μ κ°μ λλ€.- Android:
SharedPreferencesμ μ μ₯λ©λλ€. - iOS:
UserDefaultsμ μ μ₯λ©λλ€.
μ§μ λ ν€(key)μ ν΄λΉνλ κ°μ κ°μ Έμ΅λλ€. κ°μ΄ μμΌλ©΄ nullμ λ°νν©λλ€.
key: κ°μ Έμ¬ λ°μ΄ν°μ ν€μ λλ€.- Android:
SharedPreferencesμμ μ‘°νν©λλ€. - iOS:
UserDefaultsμμ μ‘°νν©λλ€.
μ§μ λ ν€(key)μ ν΄λΉνλ κ°μ μμ ν©λλ€.
key: μμ ν λ°μ΄ν°μ ν€μ λλ€.- Android:
SharedPreferencesμμ μμ ν©λλ€. - iOS:
UserDefaultsμμ μμ ν©λλ€.
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€λ₯Ό λ°λ¦ λλ€. μμΈν λ΄μ©μ LICENSE νμΌμ μ°Έκ³ νμΈμ.