Правильно, в App
, сохранить state
с вашим списком курсов, а затем с любыми курсами, добавленными посредством отправки формы.
Обработчик addCourse
, который вы передаете из App
в AddCourse
, должен выглядеть примерно так:
// App.js
addCourse = ({ courseName, courseType, courseGrade }) => {
const { coursePassGrade, courseHours } = this.getCourseByName(courseName)
const newCourse = {
courseName,
courseType,
courseGrade,
coursePassGrade,
courseHours
}
const updatedNewCourses = [...this.state.newCourses]
updatedNewCourses.push(newCourse)
this.setState({ newCourses: updatedNewCourses })
}
В AddCourse
, когда вы вызываете обработчик addCourse
, вы передаете (до App
) все имеющиеся у вас данные из формы (courseName
, courseGrade
и courseType
) , Вам не нужно отслеживать соответствующие coursePassGrade
или courseHours
в вашем AddCourse
компоненте. Задачей App
может быть поиск этих оставшихся атрибутов путем поиска в его this.state.courses
на основании courseName
, которые ему дали.
Как вы можете видеть сверху, это работа getCourseByName
:
// App.js
getCourseByName = (courseName) => {
const index = this.state.courses.findIndex((course) => {
return (course.courseName === courseName)
})
return this.state.courses[index]
}
Этот метод просматривает (в this.state.courses
) атрибуты курса на основе имени и возвращает весь объект курса. Когда вы вызываете это, в addCourse
вы заботитесь только о coursePassGrade
и courseHours
, которые вы используете для продолжения построения объекта newCourse
, который будет перемещен в this.state.newCourses
Я использовал ваш код, чтобы собрать CodeSandbox, который показывает эти методы в действии. Я надеюсь, что это поможет вам дать вам некоторое направление.