We are going to practice building class components with this project. Even though hooks are gaining popularity among react developers, class components are going to be around for a long time. It's imperative that you get used to class components, and feel comfortable working with them since you'll most likely encounter them when you are hired to work at a React app.
- Creating class-components from scratch
- Storing state in the top-level component, and sharing it with descendant components via props
- Handling form-related events like
change
andsubmit
In this project you will build an application that allows for todos to be added, completed and removed from view. This application should:
-
Use this gif as inspiration for building the DOM.
-
Hold all todos in state within the
App.js
component. This slice of state should look like the following:[ { name: 'Organize Garage', id: 1528817077286, // could look different, you could use a timestamp to generate it completed: false }, { name: 'Bake Cookies', id: 1528817084358, completed: false } ]
-
Allow for a todo's "completed" status to be toggled when clicking on an item.
-
Allow for a todo to be added when submitting the todo form component.
-
Allow for completed todos to be filtered out when clicking the clear completed button.
- Fork, clone, and
npm install
. - Launch the project on a development server executing
npm run dev
. - Visit your widget by navigating to
http://localhost:3000
with Chrome.
- Build all components as class components. Find them inside
frontend/components
. - Don't focus on styling. We want you to worry about function over form today.
- Your todo list should display a list of todos, an input field, a submit button, and a button to filter out completed todos.
<App />
will hold all the data needed for this project.- All of your application data will be stored here on
<App />
. - All of your
handler
functions should live here on<App />
.
- All of your application data will be stored here on
<TodoList />
receives your todos array and iterates over the list generating a new<Todo />
for each element in the array.<Todo />
is a component that takes in thetodo
data and displays the task to the screen.<Form />
will hold your input field and yourAdd Todo
andClear Completed
buttons.- Your input field should take in user input, and allow a user to press
Enter
or click on theSubmit Button
to add a todo to your list. - Once a todo is submitted, the Todo List should re-render and show the added todo.
- Your input field should take in user input, and allow a user to press
- Only work on main.
- Try to avoid committing broken code.
- Make sure to push code at regular intervals.