【发布时间】:2019-07-29 09:02:25
【问题描述】:
我有一个包含三个组件的小应用程序
- 父 =>
App - 儿子 =>
Courses - 孙子 =>
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 已经在Course 组件中定义为Number
我能做什么?也许我不应该在course 组件中使用值?
更新
根据 Freeman Lambda 的要求,这是我在输入字段中更改值后的状态,
所需课程更改的courseGrade 的状态。但是由于输入字段消失了,我无法继续输入。
链接到显示发生了什么的视频 https://www.screencast.com/t/Cyz1v6zMWsq
【问题讨论】:
-
尽量不要使用
onChange,而是使用onInput,并使用e.currentTarget.value而不是e.target.value -
不...还是一样的结果
-
我无法清楚地理解您的
updateCourseGrad发生了什么,以及您实际上希望在那里发生什么。您能否通过App在执行updateCourseGrade之前和之后的状态示例来扩展问题? -
我已经扩展了我的问题,我希望能够输入多个数字
-
我添加了一个视频链接,显示发生了什么
标签: javascript reactjs input state