我有一个包含三个组件的小应用
- 父=>
应用程序
- 儿子 =>
类(class)
- 孙子 =>
类(class)
应用程序状态位于应用程序组件中,在类(class)组件中,我有一个带有 onChange 事件的输入字段,该事件通过该事件来更改应用程序组件中的状态,问题是每次我键入输入都会更改为字符串我无法继续输入并更改状态。
值到达父级。
这是我的类(class)代码
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请求,这是我更改输入字段中的值后的状态,
所需类(class)的 courseGrade
状态发生变化。但因为输入字段消失了,我无法继续输入。
链接到显示发生情况的视频 https://www.screencast.com/t/Cyz1v6zMWsq
最佳答案
这里:
{(courseGrade !== ''
? courseGrade
: <input
type="number"
id={id}
onChange={this.updatedGrade}
value={courseGrade}
/>
)}
一旦 courseGrade
为 !== ''
如果您希望能够继续输入,则必须在输入过程中坚持输入。如果您希望输入在键入后消失,则必须添加一个按钮来控制删除输入的状态,例如:
class Course extends Component {
state = {
gradeValidated: false,
}
updatedGrade = (e) => {
this.props.updateCourseGrade(Number(e.target.value), Number(e.target.id));
};
toggleGradeInput = (e) => {
this.setState((state) => ({ gradeValidated: !state.gradeValidated }));
};
render() {
const {id, courseType, courseName, courseGrade} = this.props.course;
return (
<tr key={id}>
<td>
{courseName}
</td>
<td>
{(courseType ? 'a' : 'm' )}
</td>
<td>
{(this.state.gradeValidated
? courseGrade
: <input
type="number"
id={id}
onChange={this.updatedGrade}
value={courseGrade}
/>
)}
</td>
<td>
<button
onClick={this.toggleGradeInput}
style={btnStyle}
>
toggle input
</button>
<button
onClick={this.props.removeCourse.bind(this, id)}
style={btnStyle}
>
remove
</button>
</td>
</tr>
)
}
}
关于javascript - React-输入字段在onChange后变成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044419/