简体   繁体   English

ReactJS-将输入值从子级传递到父级

[英]ReactJS - pass input values from child to parent

child component 子组件

import React, { Component } from 'react'

export default class Login extends Component {
  constructor (props) {
    super(props);
    this.state = {Id: '',name: '',gender: ''};

    this.show = this.show.bind(this);
  }

  show (event) {
    if (this.state.Id === "123456" && this.state.name !== '' && this.state.gender !== '') {
      this.props.show();

      alert('you are login');
      console.log('A ID was submitted: ' + this.state.Id);
      console.log('A Name was submitted: ' + this.state.name);
      console.log('A Gender was submitted: ' + this.state.gender);
    } else {
      alert('Please enter your valid id,Your Name & Gender');
    }

    event.preventDefault();
  }

  render () {
    return (
      <div className="login">
        <form onSubmit={ this.show.bind(this) }>
          <div>
            <label>Your ID:</label>
            <input type="text" onChange={ event => this.setState({ Id: event.target.value }) } placeholder="Enter your ID" />
          </div>
          <br />

          <div>
            <label>Your Name:</label>
            <input type="text" onChange={ event => this.setState({ name: event.target.value }) } placeholder="Enter your Name" />
          </div>

          <br />
          <div>
            <label>Your Gender:</label>
            <label>Female:</label>
            <input type="radio" name="gender" value="Female" onChange=
              { event => this.setState({ gender: event.target.value }) } />
            <label>Male:</label>
            <input type="radio" name="gender" value="Female" onChange={ event => this.setState({ gender: event.target.value }) } />
          </div>
          <input type="submit" value="Submit" onClick={ this.props.comingvalue } />
        </form>
      </div>
    )
  }
}

parent component 父组件

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

    this.state = { Id: '', name: '', gender: '' };
  }

  getvalue () {
    console.log('getting values as props');
    this.setState({ Id: this.state.Id });
    this.setState({ name: this.state.name });
    this.setState({ gender: this.state.gender });
  }

  render () {
    return (
      <div className="App">
        <Login comingvalue={ this.getvalue } />
        <button type="button" className="btn btn-primary" onClick=
          { this.handleLogin }>Sign In</button>
      </div>
    );
  }
}

export default App;

now here is the my question i want that when i enter value in my child component i get those values in parent compnent how i can get this please help..'i thing you peeple should know that i cut alot of code from above code there is possibilty of any other error but i want to know only one thing which i mention above i want child coponents value in parent component.. please suggest me right solution..thanks 现在这是我的问题,我希望当我在子组件中输入值时,在父组件中获得这些值,我该如何获得此帮助。.'我偷看的东西应该知道我从上面的代码中剪切了很多代码是任何其他错误的可能性,但我只想知道我上面提到的一件事,我希望父组件中的子子组件值..请提出正确的解决方案..谢谢

Just a pointer for future posts: the less code the better and please, for the love of God, make sure the formatting is correct. 只是将来发布内容的一个指示:代码越少越好,为了上帝的爱,请确保格式正确。

A standard pattern in React for passing information back up the tree is to pass children a callback as a prop. React中用于将信息传递回树的标准模式是将子级回调作为道具传递给子级。

parent

class Parent extends React.Component {
  onChildCallback = (data) => {
    alert(data)
  }

  render() {
    return (
      <div>
        ...
        <Child onAction={this.onChildCallback}/>
      </div>
    )
  }
}

child 儿童

class Child extends React.Component {
  render() {
    return (
      <button onClick={() => this.props.onAction('hello from the child')}>
        Click Me!
      </button>
    )
  }
} 

this is, of course, simplified, but you can extend it however you like. 当然,这是简化的,但是您可以随意扩展它。 Some things to watch out for: 需要注意的一些事项:

  • make sure you're either binding the callback in the parent or using arrow functions (in this case, I'm using a ES7 class property) 确保您在父级中绑定了回调或使用箭头函数(在这种情况下,我使用的是ES7类属性)
  • if you need data from a child of a child, you need to chain these... you can get away with using context , but ... don't. 如果您需要一个孩子的数据,则需要将它们链接起来……您可以使用context ,但是……不需要。 Just don't. 只是不要。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM