首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在本例中空字符串可以工作,而this.state.foo不能呢?

为什么在本例中空字符串可以工作,而this.state.foo不能呢?
EN

Stack Overflow用户
提问于 2018-06-05 04:02:16
回答 1查看 5K关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
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末尾添加||‘’成为:

代码语言:javascript
复制
text: this.props.text || ''

我有两个问题:

为什么它可以工作,尽管‘’也应该转换为this.props.text?

  • Why,就像一样,
  1. 属性是否将this.props.text视为null或未定义?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 04:20:05

this.state.text的初始值未定义(表示this.props.text未定义)。如果inputvalue属性是未定义的,React认为输入是“不受控制的”。

在状态初始化中,您应该回退到空字符串

代码语言:javascript
复制
state = {
  text: this.props.text || ''
}

修复此问题或为TodoTextInput分配default value

代码语言:javascript
复制
TodoTextInput.defaultProps = {
  text: ''
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档