part2a
Rendering collections
Start point
const App = (props) => { const { notes } = props;
return ( <div> <h1>Notes</h1> <ul> <li>{notes[0].content}</li> <li>{notes[1].content}</li> <li>{notes[2].content}</li> </ul> </div> );};
export default App;
import React from "react";import ReactDOM from "react-dom/client";
import App from "./App";
const notes = [ { id: 1, content: "HTML is easy", date: "2019-05-30T17:30:31.098Z", important: true, }, { id: 2, content: "Browser can execute only JavaScript", date: "2019-05-30T18:39:34.091Z", important: false, }, { id: 3, content: "GET and POST are the most important methods of HTTP protocol", date: "2019-05-30T19:20:14.298Z", important: true, },];
ReactDOM.createRoot(document.getElementById("root")).render( <App notes={notes} />);
Refactoring with .map and destructuring
const App = ({ notes }) => { return ( <div> <h1>Notes</h1> <ul> {notes.map((note) => ( <li key={note.id}>{note.content}</li> ))} </ul> </div> );};
// App.js
const Note = ({ note }) => { return <li>{note.content}</li>;};
const App = ({ notes }) => { return ( <div> <h1>Notes</h1> <ul> {notes.map((note) => ( <Note key={note.id} note={note} /> ))} </ul> </div> );};
component modules
import React from "react";
const Note = ({ note }) => { return <li>{note.content}</li>;};
export default Note;
import Note from "./components/Note";
const App = ({ notes }) => { // ...};
Exercises
2.1 Course information step6
from 1.5, make a Course component module
App Course Header Content Part Part ...
const App = () => { const course = { id: 1, name: "Half Stack application development", parts: [ { name: "Fundamentals of React", exercises: 10, id: 1, }, { name: "Using props to pass data", exercises: 7, id: 2, }, { name: "State of a component", exercises: 14, id: 3, }, ], };
return <Course course={course} />;};
export default App;
2.2 Course information step 7
Show total
2.3* Course information step 8
Get total with .reduce
2.4 Course information step 9
Extend app to allow for an arbitrary number of courses
const App = () => { const courses = [ { name: "Half Stack application development", id: 1, parts: [ { name: "Fundamentals of React", exercises: 10, id: 1, }, { name: "Using props to pass data", exercises: 7, id: 2, }, { name: "State of a component", exercises: 14, id: 3, }, { name: "Redux", exercises: 11, id: 4, }, ], }, { name: "Node.js", id: 2, parts: [ { name: "Routing", exercises: 3, id: 1, }, { name: "Middlewares", exercises: 7, id: 2, }, ], }, ];
return <div>// ...</div>;};
2.5 Course information step 10 - Separate module
Course as a separate module
My solutions
My solutions:
(Please complete your own solutions before click here.)
2.1 Course component
2.2 with total
2.3 .reduce
const Header = (props) => { // console.log(props) return <h1>{props.course.name}</h1>;};
const Part = (props) => { return ( <p> {props.part} {props.exercises} </p> );};
const Content = (props) => { return ( <> <Part part={props.course.parts[0].name} exercises={props.course.parts[0].exercises} /> <Part part={props.course.parts[1].name} exercises={props.course.parts[1].exercises} /> <Part part={props.course.parts[2].name} exercises={props.course.parts[2].exercises} /> </> );};
const Total = (props) => { // 2.2 // return ( // <p>Total of {props.course.parts[0].exercises + props.course.parts[1].exercises + props.course.parts[2].exercises} exercises</p> // )
// 2.3 .reduce const exercisesArray = props.course.parts.map((part) => part.exercises); // console.log(exercisesArray) const total = exercisesArray.reduce((accu, curr) => accu + curr, 0); // console.log(total)
return <p>Total of {total} exercises</p>;};
// 2.1const Course = (props) => { const { course } = props;
return ( <div> <Header course={course} /> <Content course={course} /> <Total course={course} /> </div> );};
const App = () => { const course = { id: 1, name: "Half Stack application development", parts: [ { name: "Fundamentals of React", exercises: 10, id: 1, }, { name: "Using props to pass data", exercises: 7, id: 2, }, { name: "State of a component", exercises: 14, id: 3, }, ], };
return <Course course={course} />;};
export default App;
2.4 for an arbitrary number of courses
const Header = ({ course }) => { return <h2>{course.name}</h2>;};
const Part = ({ part }) => { return ( <p> {part.name} {part.exercises} </p> );};
const Content = (props) => { const { course } = props; // console.log(course)
return ( <> {course.parts.map((part) => ( <Part part={part} key={part.id} /> ))} </> );};
const Total = ({ course }) => { const exercisesArray = course.parts.map((part) => part.exercises); const total = exercisesArray.reduce((accu, curr) => accu + curr, 0);
return ( <p> <strong>Total of {total} exercises</strong> </p> );};
const Course = ({ course }) => { return ( <div> <Header course={course} /> <Content course={course} /> <Total course={course} /> </div> );};
// 2.4const Courses = (props) => { const { courses } = props; // console.log(courses);
return ( <> {courses.map((course) => ( <Course course={course} key={course.id} /> ))} </> );};
const App = () => { const courses = [ { name: "Half Stack application development", id: 1, parts: [ { name: "Fundamentals of React", exercises: 10, id: 1, }, { name: "Using props to pass data", exercises: 7, id: 2, }, { name: "State of a component", exercises: 14, id: 3, }, { name: "Redux", exercises: 11, id: 4, }, ], }, { name: "Node.js", id: 2, parts: [ { name: "Routing", exercises: 3, id: 1, }, { name: "Middlewares", exercises: 7, id: 2, }, ], }, ];
return ( <div> <h1>Web development curriculum</h1> <Courses courses={courses} /> </div> );};
export default App;
2.5 seperate Course component
const Header = ({ course }) => { return <h2>{course.name}</h2>;};
const Part = ({ part }) => { return ( <p> {part.name} {part.exercises} </p> );};
const Content = (props) => { const { course } = props; // console.log(course)
return ( <> {course.parts.map((part) => ( <Part part={part} key={part.id} /> ))} </> );};
const Total = ({ course }) => { const exercisesArray = course.parts.map((part) => part.exercises); const total = exercisesArray.reduce((accu, curr) => accu + curr, 0);
return ( <p> <strong>Total of {total} exercises</strong> </p> );};
const Course = ({ course }) => { return ( <div> <Header course={course} /> <Content course={course} /> <Total course={course} /> </div> );};
export default Course;
import Course from "./components/Course";
// 2.4const Courses = (props) => { const { courses } = props; // console.log(courses)
return ( <> {courses.map((course) => ( <Course course={course} key={course.id} /> ))} </> );};
const App = () => { // ...};
export default App;