У меня есть небольшое приложение с тремя компонентами
- parent =>
App
- Son =>
Courses
- Grandchild =>
Course
Состояние приложения находится в компоненте App, в компоненте Course у меня есть поле ввода с событием onChange, которое позволяет супругу изменить состояние в компоненте приложения, проблема в том, что каждый раз, когда я набираювходные данные изменяются на строку, и я не могу продолжать печатать и изменять состояние.
Значения поступают в родительский.
Это мой код курса
import React, { Component } from 'react'
class Course extends Component {
updatedGrade = (e) => {
this.props.updateCourseGrade(Number(e.target.value), Number(e.target.id));
};
render() {
const {id, courseType, courseName, courseGrade} = this.props.course;
return (
<tr key={id}>
<td>
{courseName}
</td>
<td>
{(courseType ? 'a' : 'm' )}
</td>
<td>
{(courseGrade !== ''
? courseGrade
: <input
type="number"
id={id}
onChange={this.updatedGrade}
value={courseGrade}
/>
)}
</td>
<td>
<button
onClick={this.props.removeCourse.bind(this, id)}
style={btnStyle}
>
remove
</button>
</td>
</tr>
)
}
}
это мой код, соответствующий моему приложению:
class App extends Component {
state = {
courses: [
{
id: 1,
courseName: 'bioliogy,
courseType: false,
courseHours: 10,
courseGrade: ''
},{
id: 2,
courseName: 'Mahematics,
courseType: true,
courseHours: 20,
courseGrade: ''
},{
id: 3,
courseName: 'History,
courseType: false,
courseHours: 30,
courseGrade: 50
}
]
};
updateCourseGrade(courseGrade, id){
//const courseGradeNum = Number(courseGrade);
this.setState({
courses: this.state.courses.map(course => course.id === id ? {...course, courseGrade } : course)
})
console.log('courseGrade ', courseGrade);
Теперь, когда я сделаю это:
updateCourseGrade(courseGrade, id){
const courseGradeNum = Number(courseGrade);
this.setState({
courses: this.state.courses.map(course => course.id === id ? {...course, courseGradeNum } : course)
})
Состояние получит новое значение при наборе имени courseGrade
, и я не будуЯ не хочу этого.а courseGrade
уже определен как Number
в Course
компоненте
Что я могу сделать?может быть, мне не следует использовать значение в компоненте course
?
ОБНОВЛЕНИЕ
Согласно запросу Freeman Lambda, это состояние после того, как я изменил значение вполе ввода, состояние courseGrade
желаемого курса изменяется.но так как поле ввода исчезает, я не могу продолжать печатать.
Ссылка на видео, которое показывает, что происходит https://www.screencast.com/t/Cyz1v6zMWsq