React-Native/[RN]Expo

[RN공부하기] [9]Todo App (part 2)

Dev갱이 2021. 11. 9. 15:11
728x90

(1) Contents 컴포넌트 만들기

//Components/Contents.jsx
import React,{ useState } from 'react'
import { View, StyleSheet, FlatList } from 'react-native';
import TodoItem from './TodoItem';
export default function Contents() {

    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 pressHandler = (key) => {
        setTodos( (prevTodos)=> {
          return prevTodos.filter(todo => todo.key !== key);
        })
    }

    return (
        <View style={styles.Item_Wrap}>
            <FlatList
                keyExtractor={ (item)=> item.key}
                data={todos}
                renderItem={ ( {item} ) => (
                    <TodoItem item={item} pressHandler={pressHandler}></TodoItem>
                )}
            >
            </FlatList>
        </View>
    )
}

const styles = StyleSheet.create({
    Item_Wrap:{
        marginTop : 20,
    }
});
//App.js
import Header from './Components/Header';
import Contents from './Components/Contents';
export default function App() {

  
  return (
    <View style={styles.container}>
      <Header></Header>
      <View style={styles.contents}>
        <Contents></Contents>
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
  },
  contents : {
    padding: 40,
  }
});

(2) TodoItem 컴포넌트 만들기.

//Components/TodoItem.jsx
import React from 'react'
import { StyleSheet, Text, TouchableOpacity } from 'react-native';

export default function TodoItem({ item,pressHandler }) {

    return (
        <TouchableOpacity onPress= { ()=> pressHandler(item.key)}>
            <Text style={styles.Item}>{item.todo}</Text>
        </TouchableOpacity>
    )
}

const styles = StyleSheet.create({
    Item: {
      padding:16,
      backgroundColor : '#f0f8ff',
      borderRadius:10,
      borderStyle: 'solid',
      borderWidth: 1,
      marginBottom:10,
    }
});

 

결과)

투두앱은 직접 만들어 보는게 도움이 많이 되는것 같다.

728x90