์๋ ํ์ธ์ Foma ์ ๋๋ค.
์ค๋์ ํจ์ํ ์ปดํฌ๋ํธ์์ props๊ฐ ๋ฐ๋ ๋๋ง๋ค ํ๋ฉด์ด ์ ๋ฐ์ดํธ ๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Problem
์๋์ ๊ฐ์ด ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ์์ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด ํผ ํ์์ ๋ชจ๋ฌ์ด ๋จ๋๋ก ๊ตฌํ ํ์ต๋๋ค.
์ ๊ณผ์ ์์ ์์ ๋ฒํผ์ ๋๋ ์ ๋ ํด๋น ๋ฒํผ์ด ๋๋ฆฐ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ฐ์ด ์ธํ ์์ ๋ฏธ๋ฆฌ ์์ฑ๋ผ๋๋ก ํ๊ณ , ์ถ๊ฐ ๋ฒํผ์ด ๋๋ ธ์ ๋ ๋น ์ธํ์ฐฝ์ด ๋ณด์ด๋๋ก ๊ตฌํํ๊ณ ์ถ์์ต๋๋ค.
์ผ์ชฝ์ด ์ถ๊ฐ(+) ๋ฒํผ์ ๋๋ ์ ๋, ์ค๋ฅธ์ชฝ์ด ์์ ๋ฒํผ์ ๋๋ ์ ๋์ ๋๋ค.
TodoList.tsx
์ ๋ฆฌ์คํธ ํ๋ฉด์์ useState๋ฅผ ๊ตฌํํด ์ค๋๋ค.
const [todos, setTodos] = useState(todoDatas);
const [todo, setTodo] = useState<TodoModel>({
author: '',
title: '',
content: '',
priority: -1,
});
const [editIndex, setEditIndex] = useState(-1);
์์ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด ์๋์ ๊ฐ์ ์๋ฆผ์ฐฝ์ด ๋จ๋๋ก ๊ตฌํํ๊ณ ,
OK ๋ฒํผ์ด ๋๋ฆฌ๋ฉด ์์ ๋ฒํผ์ด ๋๋ฆฐ ๋ฆฌ์คํธ์ ์์ดํ ์ ์ธ๋ฑ์ค๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์๋์ ๊ฐ์ด ์ํ๋ฅผ ์ธํ ํด ์คฌ์ต๋๋ค.
const showEditAlert = (index: number) => {
Alert.alert(
'Edit',
'Do you want to edit?',
[
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed!'),
},
{
text: 'OK',
onPress: () => {
setEditIndex(index);
setTodo(todos[index]);
setModalVisible(true);
},
},
],
{cancelable: false},
);
};
๋ง์ฝ ์ถ๊ฐ(+) ๋ฒํผ์ด ๋๋ ธ๋ค๋ฉด ๋น ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ ๋๋๋ก ๊ตฌํ ํ์ต๋๋ค.
const handlePlus = () => {
setTodo({author: '', title: '', content: '', priority: -1});
setModalVisible(true);
};
๊ทธ ๋ค์ ์ปค์คํ ๋ชจ๋ฌ์ธ AddModal์ ํ๋กํผํฐ์ todo๋ก ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌํด ์ฃผ์์ต๋๋ค.
return (
<View>
...
<AddModal
isModalVisible={isModalVisible}
handleClose={handleClose}
handleSubmit={handleSubmit}
todo={todo}></AddModal>
...
AddModal.tsx
ํ๋กํผํฐ๋ฅผ ์ ์ํด ์ค๋๋ค.
interface AddModalProps {
isModalVisible: boolean;
todo: TodoModel;
handleClose: () => {};
handleSubmit: () => {};
}
ํจ์ํ ์ปดํฌ๋ํธ์ ํ๋กํผํฐ๋ก AddModalProps๋ก ์ ์ํด ์ฃผ๊ณ , todo ๋ชจ๋ธ์ ์ ์ฅํ useState๋ฅผ ๋ง๋ค๊ณ
useEffect๋ฅผ ์ฌ์ฉํ์ฌ props๊ฐ ๋ฐ๋ ๋๋ง๋ค todo๋ฅผ props์ todo๋ก ๋ฐ๋๋๋ก ๊ตฌํํ์ต๋๋ค.
const AddModal: React.FC<AddModalProps> = props => {
const [todo, setTodo] = useState<TodoModel>({
author: '',
title: '',
content: '',
priority: -1,
});
useEffect(() => {
setTodo(props.todo);
}, [props]);
๊ทธ ๋ค์ ๋ชจ๋ฌ ์์ TextInput์ value๋ก todo์ ํ๋กํผํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์์ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด ํด๋น ๋ชจ๋ธ์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ์ธํ ์ฐฝ ์์ ์ ๋ ฅ๋๊ฒ ๋ฉ๋๋ค.
<TextInput
value={todo.author}
onChangeText={text => {
handleInputChange('author', text);
}}
style={styles.input}
placeholder="author"></TextInput>
๋๊ธ