Показать / скрыть компонент в React с помощью состояния

Я пытаюсь скрыть / показать компонент при проверке значения состояния:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Button from '@material-ui/core/Button'

class App extends Component {
    constructor(props) {
        super(props);
        this.state = true;
    }

    render() {    
        return (
          <div className = "App">
            {this.state && <Button variant = "raised" onClick = {this.state=false}>Button</Button>}

          </div>
        );
    }
}

export default App;

Я не знаю, где ошибка / неправильный код, но рендер не обновляется.

Вам необходимо предоставить функцию свойству onClick. this.state=false явно не тот. Вам также нужно использовать метод setState, а не устанавливать напрямую. И если вы там, сделайте свое состояние предметом к лучшему.

gorhawk 02.10.2018 11:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
8 887
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы неправильно его используете. Вы должны запустить такое состояние

constructor(props) {
  super(props);
  this.state = {show: true}
}

и сделайте это так

return (
    <div className = "App">
        {this.state.show && <Button variant = "raised" onClick = {() => this.setState({show:false})}>Button</Button>}

      </div>
);

В компоненте React ожидается, что this.state будет объектом, представляющим состояние вашего компонента.

1) this.state должен быть инициализирован (либо в конструкторе, либо в теле класса)

пример в конструкторе:

constructor(props) {
    super(props);
    this.state = {
        showButton: true
    };
}

2) Обработчик событий должен быть ссылкой на метод (this.handleButtonClick) вашего компонента, и этот метод должен быть привязан к экземпляру компонента:

constructor(props) {
    super(props);
    this.state = {
        showButton: true
    };
    this.handleButtonClick = this.handleButtonClick.bind(this);
}
handleButtonClick(event) {
    this.setState(() => ({ showButton: false }));
}
render() {

    return (
        <div className = "App">
            {this.state.showButton && <Button variant = "raised" onClick = {this.handleButtonClick}>Button</Button>}

        </div>
    );
}

Обратите внимание, что вы не должны устанавливать состояние напрямую, а лучше использовать метод setState, подпись setState, которую я использовал, является формой средства обновления, просмотрите документацию по реакции для объяснения этого.

Вы не можете объявить this.state как переменную, которая должна возвращать ошибку при компиляции. Как сказал Мурат.

Состояние в react является JS-объектом и объявлено как таковое:

this.state = { ... }

Чтобы изменить (изменить) состояние, вы не можете сделать это напрямую в реакции, иначе реакция не узнает, что оно изменилось. Если бы вы сказали, что ваше состояние:

this.state = {show: true}

а затем хотел изменить логическое значение на false, вы не могли этого сделать, просто выполнив this.state.show = false. React не узнает, что изменение произошло, поэтому вам нужно использовать метод реакции под названием setState(). Как сказал Мурат, вы измените состояние, используя следующий метод onClick: onClick = {() => this.setState({show:false})}.

Вы должны проверить эту страницу документации о состоянии реакции, чтобы узнать больше, это важная часть работы с React.JS.

https://reactjs.org/docs/state-and-lifecycle.html

В статье есть раздел под названием «Правильное использование состояния», где вы можете ознакомиться с ним. :)

Большое спасибо !

Zenyo 02.10.2018 11:26

Другие вопросы по теме