javascript - react ,形成 : Cannot read property 'length' of undefined

标签 javascript reactjs forms

我这里的结构非常简单。我有一个输入和文本区域。我想管理状态中的输入/文本区域值。我还想验证 textarea 字段(最多 140 个字符)。为此,我使 if 变得简单。

现在,当我在第一个输入中输入内容时,出现错误:

Uncaught TypeError: Cannot read property 'length' of undefined at App.render (App.jsx:44) (...)

我不知道为什么会出现此错误。我什至还没有在我的 textarea 字段上做任何事情......

代码:

class App extends Component {
  state = {
    formValues: {
      title: "",
      description: ""
    }
  };

  titleValueChangeHandler = e => this.setState({ formValues: { title: e.target.value } });


  descriptionValueChangeHandler = e => {
    if (this.state.formValues.description.length === 140) return;
    this.setState({ formValues: { description: e.target.value } });
  };

  render() {
    return (
      <>
        <input
          type="text"
          onChange={this.titleValueChangeHandler}
          value={this.state.formValues.title}
        />
        <textarea
          onChange={this.descriptionValueChangeHandler}
          value={this.state.formValues.description}
        />
        <p>{this.state.formValues.description.length}</p>
      </>
    );
  }
} 

演示:https://codesandbox.io/s/kw6pnxwv0v

最佳答案

你在 eventHandler 中重写状态。

您需要使用 prevState 来保存对象的上一个状态:

titleValueChangeHandler = e => this.setState(prevState => ({ ...prevState, formValues: { title: e.target.value, description: prevState.formValues.description }}));

对于这样的闭包重构:

titleValueChangeHandler = e => {
const newValue = e.target.value
this.setState(prevState => ({ ...prevState, formValues: { title: newValue , description: prevState.formValues.description }}));
}

关于javascript - react ,形成 : Cannot read property 'length' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011095/

相关文章:

javascript - 如何使用 Gmails 内置的方法发送 Gmail 谈话消息

javascript - 使用 lodash 从对象数组中获取唯一的 [key,value]

node.js - Next.JS - `.htaccess` 文件?

javascript - 使用以表单提交的值在meteor中发布和订阅mongodb查询的结果

javascript - 清除html5表单错误

jquery - 如何通过 jQuery 表单使用 Google Analytics

javascript - 打开一个新窗口并关闭另一个窗口

javascript - 在按键上实现搜索表单上的建议下拉列表(MaterializeCSS)

javascript - 动态 react 状态

javascript - 模式不允许文件链接