Built at: 2024-10-16T09:55:25.150Z Skip to content

part2a

Rendering collections

Start point

App.js
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;
index.js
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

App.js
const App = ({ notes }) => {
return (
<div>
<h1>Notes</h1>
<ul>
{notes.map((note) => (
<li key={note.id}>{note.content}</li>
))}
</ul>
</div>
);
};
Note component
// 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

src/components/Note.js
import React from "react";
const Note = ({ note }) => {
return <li>{note.content}</li>;
};
export default Note;
App.js
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
...
App.js
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

App.js
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

App.js
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.1
const 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

App.js
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.4
const 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

src/components/Course.js
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;
App.js
import Course from "./components/Course";
// 2.4
const Courses = (props) => {
const { courses } = props;
// console.log(courses)
return (
<>
{courses.map((course) => (
<Course course={course} key={course.id} />
))}
</>
);
};
const App = () => {
// ...
};
export default App;