Code icon

REACT - ToDoApp

Links


    //img
    



    // INDEX.JS
    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App'
    import './index.css';


    ReactDOM.render(
        <App/>,
    document.getElementById('root')
    );



    // APP.JS
    import React from 'react'
    import TodoItem from "./components/TodoItem"
    import todoData from './components/todoData';


    class App extends React.Component { 
    constructor(){
        super()
        this.state ={
            todos: todoData
        }
        this.handleChange = this.handleChange.bind(this)
        }
    
        handleChange(id){
        // console.log("Changed", id)
        //Create a new array. VIdeo todoApp pHase 6 2:40h*** Complex
        this.setState(prevState => {
            const updatedTodos = prevState.todos.map(todo => {
            if (todo.id === id){
                todo.completed = !todo.completed
            }
            return todo
            })
            return {
            todos: updatedTodos
            } 
        }) 
        
        }
        
        render(){
        const todoItems = this.state.todos.map(item => <TodoItem key={item.id} item={item} handleChange={this.handleChange}/>)
        
        return (
            <div className="todo-list">
                {todoItems}
            </div>
        )
    }
    }


    export default App;


    // TODOITEM.JS 
    import React from 'react';

    function TodoItem(props){

    const completedStyle = {
        fontStyle: "italic",
        color: "#cdcdcd",
        textDecoration: "line-through"
    }
        return (
            <div className="todo-item">
            <input type="checkbox" 
            checked={props.item.completed} 
            onChange={()=> props.handleChange(props.item.id)}/>
            <p style={props.item.completed ? completedStyle : null}>{props.item.text}</p>
        </div>
        )
    }

    export default TodoItem


    // TODODATA.JS

    
    const todoData = [
    {
    id: 1,
    text:"Take out the trash",
    completed:true
    },
    {
    id: 2,
    text:"Grocery Shopping",
    completed:false
    },
    {
    id: 3,
    text:"Cook lunch",
    completed:true
    },
    {
    id: 4,
    text:"Walk in Park",
    completed:false
    }

    ]

    export default todoData