-
[RN공부하기] [10]Todo App (part 3)React-Native/[RN]Expo 2021. 11. 10. 08:31728x90
클릭시 데이터 삭제구현까지 했다, 이제 데이터 추가 하는거까지 해보자!
//Components/Apptodo.jsx import React,{ useState } from 'react' import { View, StyleSheet, TextInput, Button } from 'react-native'; export default function AddTodo({SubmitHandler}) { const [text, setText] = useState(''); const ChangeHandler = (val) => { setText(val); } return ( <View> <TextInput style={styles.Inputs} placeholder='New To do...' onChangeText={ChangeHandler} > </TextInput> <Button onPress= { () => SubmitHandler(text)} title='Add todo' color='coral'></Button> </View> ) } const styles = StyleSheet.create({ Inputs: { marginBottom:10, paddingHorizontal :8, paddingVertical :6, borderBottomWidth : 1, borderBottomColor : '#ddd', } });
//App.js import { StatusBar } from 'expo-status-bar'; import React, { useState, useRef } from 'react'; import { View, StyleSheet } from 'react-native'; import FlatListComponents from './Components/FlatListComponents'; import ScrollViewComponent from './Components/ScrollViewComponent'; import Header from './Components/Header'; import Contents from './Components/Contents'; import AddTodo from './Components/AddTodo'; export default function App() { const nextId = useRef('7'); const [todos, setTodos ] = useState([ {todo: "Coding", key:'1' }, {todo: "Shopping", key:'2' }, {todo: "excyte", key:'3' }, {todo: "movie", key:'4' }, {todo: "wash", key:'5' }, {todo: "cleaning", key:'6' }, {todo: "Study", key:'7' }, ]); const SubmitHandler = (text) => { nextId.current = parseInt(nextId.current)+1; /* setTodos( (prevTodos)=> { return [ ...prevTodos, {todo: text, key : nextId.current.toString() } ]; }) */ const newtodo = { todo: text, key : nextId.current.toString() }; setTodos([...todos, newtodo]); } return ( <View style={styles.container}> <Header></Header> <View style={styles.contents}> <AddTodo SubmitHandler={SubmitHandler}></AddTodo> <Contents todos={todos} setTodos={setTodos}></Contents> </View> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', }, contents : { padding: 40, } });
결과)
728x90'React-Native > [RN]Expo' 카테고리의 다른 글
[RN공부하기] [12]Dismissing the Keyboard (0) 2021.11.10 [RN공부하기] [11]Alerts (0) 2021.11.10 [RN공부하기] [9]Todo App (part 2) (0) 2021.11.09 [RN공부하기] [8]Todo App (part 1) (0) 2021.11.09 [RN공부하기] [7]Touchable Components (0) 2021.11.09