下面是我的代码:
import React, { Component } from 'react'
import classnames from 'classnames'
class TodoTextInput extends Component {
state = {
text: this.props.text
}
handleSubmit = e => {
const text = e.target.value.trim()
if (e.which === 13) {
this.props.onSave(text)
this.setState({
text: ''
})
}
}
handleChange = e => {
this.setState({
text: e.target.value
})
}
handleBlur = e => {
if (!this.props.newTodo) {
this.props.onSave(e.target.value)
}
}
render() {
return (
<input className={
classnames({
edit: this.props.editing,
'new-todo': this.props.newTodo
})
}
type='text'
autoFocus='true'
value={this.state.text}
onChange={this.handleChange}
placeholder={this.props.placeholder}
onKeyDown={this.handleSubmit} />
)
}
}
export default TodoTextInput
当我运行此代码并开始在输入字段中键入时,在控制台中得到以下错误消息:
警告:组件正在更改要控制的文本类型的非受控输入。
这使我相信value属性将this.state.text视为空或未定义。但是,当我在state.text末尾添加||‘’成为:
text: this.props.text || ''
我有两个问题:
为什么它可以工作,尽管‘’也应该转换为this.props.text?
发布于 2018-06-05 04:20:05
this.state.text
的初始值未定义(表示this.props.text
未定义)。如果input
的value
属性是未定义的,React认为输入是“不受控制的”。
在状态初始化中,您应该回退到空字符串
state = {
text: this.props.text || ''
}
修复此问题或为TodoTextInput
分配default value
TodoTextInput.defaultProps = {
text: ''
}
https://stackoverflow.com/questions/50687991
复制相似问题