Передать значения из формы в другой компонент - PullRequest
0 голосов
/ 11 мая 2019

У меня есть компонент Form с тремя полями ввода, при отправке формы эти значения должны быть переданы компоненту Results.Когда я отправляю, ничего не происходит, они печатаются на консоли, но не на компоненте Results.

В компоненте Results js я пробовал передавать реквизиты, но ничего не происходит, никаких сообщений об ошибках.Может кто-нибудь определить, чего не хватает в моем коде?

Спасибо!

APp.js

import React, { Component } from 'react';
import Form from './components/Form';
import Results from './components/Results';

import './App.css';

class App extends Component {
  state = {
    title: '',
    author: '',
    isbn: ''
  }

  render() {
    //const {title, author, isbn} = this.state;
    return (
      <React.Fragment>
        <div className="container">
          <Form />
          <Results 
            title={this.state.title}
            author={this.state.author}
            isbn={this.state.isbn}
          />
        </div>
      </React.Fragment>
    );
  }
}

export default App;

Form.js:

import React, { Component } from 'react';


class Form extends Component {
    constructor(props){
        super(props);
        this.state = {
            title: '',
            author: '',
            isbn: '',
        }

        this.onChangeHandler = this.onChangeHandler.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleSubmit = (e) => {
        e.preventDefault();
        //const {title, author, isbn} = this.state;
        console.log('Title: ' + this.state.title);
        console.log('Author: ' + this.state.author);
        console.log('ISBN: ' + this.state.isbn);

    }

    onChangeHandler = (e) => {
        //const {title, author, isbn} = e.target;
        this.setState({
            [e.target.name]: e.target.value
        })   

    }

  render() {
    return (
      <div>
        <div className="container mt-4">
            <h1 className="display-4 text-center">
                My<span className="text-primary">Book</span>List
            </h1>
        <form onSubmit={this.handleSubmit}>
            <div className="form-group">
                <label htmlFor="title">Title</label>
                <input 
                    type="text" 
                    className="form-control"
                    name="title" 
                    value={this.state.title}
                    onChange={this.onChangeHandler} />
            </div>
            <div className="form-group">
                <label htmlFor="author">Author</label>
                <input 
                    type="text"  
                    className="form-control"
                    name="author"
                    value={this.state.name}
                    onChange={this.onChangeHandler} />
            </div>
            <div className="form-group">
                <label htmlFor="isbn">ISBN#</label>
                <input 
                    type="text" 
                    className="form-control"
                    name="isbn"
                    value={this.state.name}
                    onChange={this.onChangeHandler} />
            </div>
                <input
                    type="submit"
                    value="Add Book"
                    className="btn btn-primary btn-block"
                />
        </form>

        </div>

      </div>


    )
  }
}


export default Form;

Результаты.js

import React from 'react';

const Results = (props) => {
    console.log(props);
    return ( 
        <div>
            <h3>Results</h3>
            <p>{props.title}</p>
            <p>{props.author}</p>
            <p>{props.isbn}</p>
        </div>

     );
}

export default Results;

1 Ответ

1 голос
/ 11 мая 2019

Вам нужно передать значения из Form его родителю, чтобы родитель мог установить свойства Result, вот как вы можете это сделать.

class App extends Component {
  ....
  onFormSubmit = (author, title, isbn) => {
    this.setState({title, author, isbn});
  }

  render() {
    return (
      ....
      <Form onFormSubmit={this.onFormSubmit}/>
      ....  
    );
  }
}


class Form extends Component {
    ....

    handleSubmit = (e) => {
        e.preventDefault();
        const { author, title, isbn } = this.state;   
        this.props.onFormSubmit(author, title, isbn);
    }
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...