将对象转换为对象数组后,我需要更改子组件的 props 参数中的哪些内容?
What do I need to change in my children components' props parameters after turning an object into array of objects?
我的 App 组件中有一个对象,子组件将其作为参数。
现在,我想将此对象扩展为一个对象数组。我的道具应该如何传递到子组件中?
我已经尝试解构子组件中的 props 并在控制台记录错误,因为我收到 "undefined" 错误并且我的 map 和 reduce 函数不再工作。
从此->
Index.js
import React from "react";
import ReactDOM from "react-dom";
import Course from "./components/Course";
const App = () => {
const course = {
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
},
{
name: "Redux",
exercises: 11,
id: 4
}
]
};
return (
<div>
<ul>
<Course course={course} />
{}
</ul>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
对此Index.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>
Course.js
import React from "react";
import Header from "./Header";
const Course = ({ course }) => {
let totalExercises = course.parts.reduce(
(sum, part) => sum + part.exercises,
0
);
return (
<div>
<Header course={course} />
{course.parts.map(part => (
<p key={part.id}>
{part.name} {part.exercises}
</p>
))}
{totalExercises}
</div>
);
};
export default Course;
我现在如何传递这个新数组,以便我的子组件可以接受它们?
有两种方法可以做到这一点。
- 您不更改子组件。在消耗组件的树的更高级别使用数组方法执行所有代码。
像这样index.js
import React from "react";
import ReactDOM from "react-dom";
import Course from "./components/Course";
const App = () => {
const courses = [{
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
},
{
name: "Redux",
exercises: 11,
id: 4
}
]
},{
}];
return (
<div>
{
courses.map(course => (
<ul>
<Course course={course} />
</ul>
))
}
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
在第二种方法中你需要改变course.js
它将接受一系列课程。在那边使用地图来迭代数组
对象。
我的 App 组件中有一个对象,子组件将其作为参数。
现在,我想将此对象扩展为一个对象数组。我的道具应该如何传递到子组件中?
我已经尝试解构子组件中的 props 并在控制台记录错误,因为我收到 "undefined" 错误并且我的 map 和 reduce 函数不再工作。
从此-> Index.js
import React from "react";
import ReactDOM from "react-dom";
import Course from "./components/Course";
const App = () => {
const course = {
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
},
{
name: "Redux",
exercises: 11,
id: 4
}
]
};
return (
<div>
<ul>
<Course course={course} />
{}
</ul>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
对此Index.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>
Course.js
import React from "react";
import Header from "./Header";
const Course = ({ course }) => {
let totalExercises = course.parts.reduce(
(sum, part) => sum + part.exercises,
0
);
return (
<div>
<Header course={course} />
{course.parts.map(part => (
<p key={part.id}>
{part.name} {part.exercises}
</p>
))}
{totalExercises}
</div>
);
};
export default Course;
我现在如何传递这个新数组,以便我的子组件可以接受它们?
有两种方法可以做到这一点。
- 您不更改子组件。在消耗组件的树的更高级别使用数组方法执行所有代码。
像这样index.js
import React from "react";
import ReactDOM from "react-dom";
import Course from "./components/Course";
const App = () => {
const courses = [{
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
},
{
name: "Redux",
exercises: 11,
id: 4
}
]
},{
}];
return (
<div>
{
courses.map(course => (
<ul>
<Course course={course} />
</ul>
))
}
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
在第二种方法中你需要改变course.js
它将接受一系列课程。在那边使用地图来迭代数组 对象。