Задать вопрос
@Columnistdc
Junior front-end

This.state поменялся в react devtools, но не поменялся в консоли. В чем причина?

import React, { Component } from 'react';

import Modal from './components/Modal';

import logo from './logo.svg';
import './App.css';

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

    this.state = {
      showModal: false,
      time: ' ',
      email: ' ',
      name: ' ',
    };

    this.handleShow = this.handleShow.bind(this);
    this.handleHide = this.handleHide.bind(this);
  }

  handleShow() {
    this.setState({showModal: true});
  }

  handleHide() {
    const Vemail = document.querySelector('#email').value;
    const Vname = document.querySelector('#name').value;

    this.setState({showModal: false,
                   email: Vemail,
                   name: Vname});

    let yyy = this.state;
    console.log(yyy);
  }

  render() {
    const modal = this.state.showModal ? (
      <Modal>
        <div className="modal">
          <form className="form">
            <label htmlFor = "date">Time</label>
            <input type = "text" id = "date"/>
            <label htmlFor = "email">Email</label>
            <input type = "text" id = "email"/>
            <label htmlFor = "name">Name</label>
            <input type = "text" id = "name"/>
            <button onClick={this.handleHide}>Click</button>
          </form>
        </div>
      </Modal>
    ): null;

    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>
        <a href="#" onClick={this.handleShow}> <h1>C`mon, sign in!</h1> </a>
        {modal}
      </div>
    );
  }
}

export default App;


import { Component } from 'react';
import ReactDOM from 'react-dom';

const modalRoot = document.getElementById('modal-root');

export default class Modal extends Component {
  constructor(props) {
    super(props);
    this.el = document.createElement('div');
  }

  componentDidMount() {
    console.log('Hi', this.state, this.props);
    modalRoot.appendChild(this.el);
  }

  componentWillUnmount() {
    modalRoot.removeChild(this.el);
  }

  render() {
    return ReactDOM.createPortal(
      this.props.children,
      this.el,
    );
  }
}
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
Вам нужно запомнить что setState асинхронная функция.
this.setState({showModal: false,
                   email: Vemail,
                   name: Vname},()=>console.log(this.state)); //здесь будет то чт онужно 

    let yyy = this.state;
    console.log(yyy);//здесь дынные еще не попали в стэйт
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Columnistdc Автор вопроса
Junior front-end
Видимо где-то туплю со state, но никак не могу понять, где именно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽