React не может динамически отображать правильный компонент

Это мой App.js

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

    render() {
        return (
            <div>
                <Helmet>
                    <meta name = "viewport" content = "width=device-width, initial-scale=1, maximum-scale=1"/>
                </Helmet>
                <Wrapper state = {this.state.loggedIn}/>
            </div>

        )

    }
}

Это передает состояние loggedIn компоненту оболочки. Эта оболочка динамически определяет, какой компонент визуализировать. Вот код оболочки,

class Wrapper extends React.Component {

    render() {
        const MainComp = this.props.state.loggedIn ? Logged : Unlogged;
        return (
            <BrowserRouter>
                <div className = "wrapper">
                    <Header state = {this.props.state}/>
                    <MainComp state = {this.props.state}/>
                </div>
            </BrowserRouter>
        );
    }
}

Проблема в том, что даже если переменная loggedIn имеет значение false, отображается правильный компонент. Однако, когда я меняю его на true, он все равно продолжает отображать старый или неправильный компонент. Что я здесь делаю не так?

Как вы это меняете?

Eddie D 06.06.2018 00:51

@EddieDelRio, вручную изменив значение переменной loggedIn с true на false.

Melissa Stewart 06.06.2018 00:52

Это не сработает. Вам нужно будет повторно визуализировать состояние с помощью this.setState

Eddie D 06.06.2018 00:53

Можете ли вы включить образец кода о том, как вы его вручную меняете?

Eddie D 06.06.2018 00:54

@EddieDelRio Я новичок в React, вы можете мне помочь, как это сделать?

Melissa Stewart 06.06.2018 00:54

Как я уже говорил, я просто вручную заменяю true на false.

Melissa Stewart 06.06.2018 00:54

Также передается состояние, а не состояние.

Eddie D 06.06.2018 00:58

Вы передали не ту опору. Взгляните на внесенные мной изменения, и это должно решить проблему. В настоящее время this.props.state.loggedIn - это undefined, который всегда оценивается как false.

Eddie D 06.06.2018 01:04
Поведение ключевого слова "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) для оценки ваших знаний,...
0
8
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы передаете state = {this.state.loggedIn}, который будет истинным или ложным но у вашего ребенка вы получаете this.props.state.loggedIn, который вообще не определяется, потому что state === loggedIn

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

    render() {
        return (
            <div>
                <Helmet>
                    <meta name = "viewport" content = "width=device-width, initial-scale=1, maximum-scale=1"/>
                </Helmet>
                <Wrapper state = {this.state}/>
            </div>

        )

    }
}

Вызовите конструктор со свойствами для вашего дочернего класса.

class Wrapper extends React.Component 
{
  constructor(props)
  {
    super(props);
  }

    render() {
        const MainComp = this.props.state.loggedIn ? Logged : Unlogged;
        return (
            <BrowserRouter>
                <div className = "wrapper">
                    <Header state = {this.props.state}/>
                    <MainComp state = {this.props.state}/>
                </div>
            </BrowserRouter>
        );
    }
}

Итак, это работает, и правильный компонент отображается, но я также получаю Line 9: Useless constructor no-useless-constructor.

Melissa Stewart 06.06.2018 01:04

Странный. Что вы используете для компиляции?

Eddie D 06.06.2018 01:06

Попробуйте удалить конструктор оболочки. Я не понимаю, почему это приведет к ошибке. Также отметьте как отвеченный, чтобы закрыть вопрос, если ваша проблема решена.

Eddie D 06.06.2018 01:07

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