javascript - React - 从子表单组件更新父状态

标签 javascript reactjs

我正在尝试从我的子组件表单 <Form handler = {this.handler} /> 更新我的状态。但是当我按回车键时,当前状态值为空。我认为问题出在我的 handler(e) 函数中,但我不知道它是什么。

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Form from './Form.js';
import { Button } from 'react-bootstrap';

class App extends Component {
  constructor(props) {
    super(props);

    this.handler = this.handler.bind(this)


    this.state = {
      value: 11
    }
  }

  handler(e) {
    e.preventDefault();
    this.setState({
      value: e.target.value
    })
  }


  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
        <Button bsStyle='success'>Hello</Button>
        <Form handler = {this.handler} />
        <h1>{this.state.value}</h1>
      </div>
    );
  }
}

export default App;

import React from 'react';
import {FormControl} from 'react-bootstrap';
import {FormGroup} from 'react-bootstrap';
import {ControlLabel} from 'react-bootstrap';
import {HelpBlock} from 'react-bootstrap';
import {InputGroup} from 'react-bootstrap';

class Form extends React.Component {
  constructor(props, context) {
    super(props, context);

    this.handleChange = this.handleChange.bind(this);

    this.state = {
      value: ''
    };
  }

  getValidationState() {
    const length = this.state.value.length;
    if (length > 10) return 'success';
    else if (length > 5) return 'warning';
    else if (length > 0) return 'error';
    return null;
  }

  handleChange(e) {
    this.setState({ value: e.target.value });
  }

  render() {
    return (
      <form onSubmit = {this.props.handler}>
        <FormGroup
          bsSize="small"
          controlId="formBasicText"
          validationState={this.getValidationState()}
        >
          <InputGroup>
            <FormControl
              type="text"
              value={this.state.value}
              placeholder="Enter text"
              onChange={this.handleChange}
            />
            <InputGroup.Addon>lbs</InputGroup.Addon>
          </InputGroup>
          <FormControl.Feedback />

        </FormGroup>
      </form>
    );
  }
}

export default Form;

最佳答案

您已在 App 中定义了 handleChange 并将其传递给 Form。但您不是使用传递的 prop 函数,而是再次在 Form 组件中创建一个新函数 handleChange。您还在两个组件中声明了 value 状态。使用 handleChange prop 函数来处理更改,而不是创建新的更改,

<FormControl
    type="text"
    value={this.state.value}
    placeholder="Enter text"
    onChange={this.props.handleChange}
/>

关于javascript - React - 从子表单组件更新父状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50708415/

相关文章:

javascript - 当用户滚动到每个页面底部之前时,Div 会淡出不透明度

javascript - react / react Hook : I need to run a validation on an input field depending on active/inactive state

javascript - 在同构 react 应用程序中,是否有一种更简洁的方法可以在客户端和服务器端获取当前 URL?

javascript - 如何打包我的 React hook 效果供其他人重复使用?

javascript - 出现 TS 错误, "Property ' 类型 'TPage' 上不存在 child

javascript - 如何在 Javascript 中的 html 编码中正确使用 .click 选择类型?

javascript - 从数据表创建复杂的 json C#

javascript - Edge 扩展的 browser.alarms 的替代品

javascript - 如何在不发送太多请求的情况下通过前端在每次鼠标单击时更新我的​​数据库?

javascript - 模拟raphael js路径上的点击事件