expo AsyncStroage라는 모듈 사용
공식문서에서 설치문 터미널 입력
암호화되어있지 않아서 중요 정보는 넣지 말쟈
브라우저의 local storage처럼 작동
=> await과 async 사용해야한다는 차이점
저장
// string 저장
const storeData = async (value) => {
try {
await AsyncStorage.setItem('@storage_Key', value)
} catch (e) {
// saving error
}
}
// object 저장
const storeData = async (value) => {
try {
const jsonValue = JSON.stringify(value)
await AsyncStorage.setItem('@storage_Key', jsonValue)
} catch (e) {
// saving error
}
}
로드
const loadToDos = async () => {
try {
const s = await AsyncStorage.getItem(STORAGE_KEY)
const loadedObj = JSON.parse(s);
setToDos(loadedObj);
}catch (e) {
console.log(e)
}
}
// 처음 실행시 불러오는 함수 실행
useEffect(()=>{
loadToDos();
}, [])
공식문서
=> https://docs.expo.dev/versions/latest/sdk/async-storage/
async () => {
const newToDos = {...toDos};
delete newToDos[key];
setToDos(newToDos);
await saveToDos(newToDos);
}
const deleteToDo = (key) => {
Alert.alert("삭제하시겠습니까?", "진짜루?", [
{text : "Cancel"},
{
text : "Delete",
style : "destructive",
onPress : async () => {
const newToDos = {...toDos};
delete newToDos[key];
setToDos(newToDos);
await saveToDos(newToDos);
}
}
]);
return
}
// States
const [editID, setEditID] = useState("");
const [editText, setEditText] = useState("")
const onChangeEditText = (payload) => {setEditText(payload)}
// Edit Function
const editToDos = async (key) => {
const editToDos = {...toDos};
editToDos[key].text = editText;
setToDos(editToDos);
setEditID("");
setEditText("");
await saveToDos(editToDos);
}
...
return(
...
// rendering
{
key == editID ? (
<TextInput
style={styles.editInput}
placeholder={toDos[key].text}
keyboardType="default"
returnKeyType="done"
onChangeText={onChangeEditText}
value={editText}
onSubmitEditing={()=>{editToDos(key)}}
>
</TextInput>
) : (
<Text style={styles.toDoText}>{toDos[key].text}</Text>
)
}
...
)