React Single Page Application Task Tracker
by Keith Rowles • 28/06/2023React
Summary
React JS single page application SPA - task tracker where you can add and delete tasks.
This project has been deployed to Netlify.
Tech and Tools
- JavaScript
- CSS
- HTML
- React JS
- GitHub
- Netlify
Sample Code
App.js
import { useState } from 'react';
import Header from './components/Header';
import Tasks from './components/Tasks';
import AddTask from './components/AddTask';
function App() {
const [showAddTask, setShowAddTask] = useState(false);
const [tasks, setTasks] = useState([
{
id: 1,
text: 'Buy some milk',
day: 'April 6th at 5:30pm',
reminder: true,
},
{
id: 2,
text: 'Go to the gym',
day: 'Today at 7:30pm',
reminder: true,
},
{
id: 3,
text: 'Pick up the kids',
day: 'Today at 3:00pm',
reminder: false,
},
]);
// add task
const addTask = (task) => {
const id = Math.floor(Math.random() * 10000) + 1;
const newTask = { id, ...task };
setTasks([...tasks, newTask]);
};
// delete task
const deleteTask = (id) => {
setTasks(tasks.filter((task) => task.id !== id));
};
// toggle reminder
const toggleReminder = (id) => {
setTasks(
tasks.map((task) =>
task.id === id ? { ...task, reminder: !task.reminder } : task
)
);
};
return (
<div className="container">
<Header
onAdd={() => setShowAddTask(!showAddTask)}
showAdd={showAddTask}
/>
{showAddTask && <AddTask onAdd={addTask} />}
{tasks.length > 0 ? (
<Tasks tasks={tasks} onDelete={deleteTask} onToggle={toggleReminder} />
) : (
'No Tasks'
)}
</div>
);
}
export default App;
AddTask.js
import { useState } from 'react';
const AddTask = ({ onAdd }) => {
const [text, setText] = useState('');
const [day, setDay] = useState('');
const [reminder, setReminder] = useState(false);
const onSubmit = (e) => {
e.preventDefault();
if (!text) {
alert('Please add task');
return;
}
onAdd({ text, day, reminder });
setText('');
setDay('');
setReminder(false);
};
return (
<form className="add-form" onSubmit={onSubmit}>
<div className="form-control">
<label>Task</label>
<input
type="text"
placeholder="Add Task"
value={text}
onChange={(e) => setText(e.target.value)}
/>
</div>
<div className="form-control">
<label>Day and Time</label>
<input
type="text"
placeholder="Add Day and Time"
value={day}
onChange={(e) => setDay(e.target.value)}
/>
</div>
<div className="form-control form-control-check">
<label>Set Reminder</label>
<input
type="checkbox"
checked={reminder}
value={reminder}
onChange={(e) => setReminder(e.currentTarget.checked)}
/>
</div>
<input type="submit" value="Save Task" className="btn btn-block" />
</form>
);
};
export default AddTask;
Demo
Open demo on Netlify.
Link to DemoRepo
Open GitHub Repository to view full source code.
Link to Repo