Cyberial
@Cyberial
Alone kitten Meow :)

Как использовать данные из API и выводить их с помощью React?

Доброго времени! Делаю тестовое задание на сайт, и нужно главное меню выводить не только в навигации, но и при нажатии на *гамбургер* чтоб тоже меню открывалось в левой части страницы но без некоторых div.
Допустим я очень ленивый программист, и хочу использовать JSX компонент в котором есть данный код
import React                          from 'react';
import HeaderLogo,   {ReactComponent as Logo} from '../../../img/logo/logo.svg';
import HeaderLogout, {ReactComponent as Logout} from '../../../img/icons/sign-out.svg';

class MainHeader extends React.Component {
    constructor(props) {
        super(props);
            this.state = {
                user_name: '',
                user_surname: '',
                user_photo: ''
            }
        fetch('some api')
            .then((response) => {
                return response.json();
            })
            .then((data) => {
                console.log(data);
                if (data.success) {
                        this.setState({
                            user_name: data.user.name,
                            user_surname: data.user.email,
                            user_photo: data.user.photo
                        });
                } else {
                    this.setState({
                        user_name: 'Sign in'
                    })
                }
            })
    }
    render() {
        return (
            <header className='Main-header'>
                <div className='Main-header--items container flex'>

                    <div className='Main-header--logo'>
                        <a href='#'><img src={HeaderLogo}></img></a>
                    </div>
                

                    <div className='Main-header--nav' id='burger-nav'>
                        <nav>
                            <ul className='flex'>
                                <li><a href='#'>About me</a></li>
                                <li><a href='#'>Relationships</a></li>
                                <li><a href='#'>Requirements</a></li>
                                <li><a href='#'>Users</a></li>
                                <li><a href='#'>Sign Up</a></li>
                            </ul>
                        </nav>
                    </div>
                
                    <div className='User-info flex'>
                        <div className='User-info--data'>
                            <p className='User-info--name'>{this.state.user_name}</p>
                            <p className='User-info--email'>{this.state.user_surname}</p>
                        </div>
                        <div className='User-minimizer-photo'>
                            <img src={this.state.user_photo}></img>
                        </div>
                        <div className='User-logout'>
                            <a href='#'><Logout/></a>
                        </div>
                    </div>

                    <div className='toggle-menu-burger' id='open-button'>
                        <div className='items-burger'>
                            <span className='bm-burger-button'></span>
                            <span className='bm-burger-button'></span>
                            <span className='bm-burger-button'></span>
                            <button>Open Menu</button>
                        </div>
                    </div>

                </div>
            </header>

        )
    }
}
export default MainHeader

Мне нужно показать при нажатии на гамбургер тоже самое, но без пары div.
Как взять нужные JSX html теги? В переменные закинуть и вызывать ?
Или создать новый компонент в котором описать тот же JSX ?
Но нужно передать туда this.state которое подгружает из API данные пользователя, но если так делать в другом компоненте то this.state.* не показывает данные...
Описал как смог, если что либо не понятно я готов ответить! Спасибо за помощь
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
@Dozalex
Senior Frontend Developer
Я бы порекомендовал поработать немного с архитектурой.
Необходимо разделять компоненты и логику запросов.
Старайтесь не использовать относительные пути вверх по дереву.
Данные о юзере лучше хранить в сторе, а не в стейте. (redux)
Также, было бы хорошо использовать более современный синтаксис, посмотрите на хуки реакта, они не страшные.

Ну а по самому вопросу, когда вынесется логика запроса данных, это будет обычный компонент, в который можно прокинуть проп isBurger и отображать блоки в зависимости от его значения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы