React-Router и другие скрипты (jquery plugins)

182
16 марта 2018, 13:04

Работаю над проектом. Понадобилось растянуть навороченный Bootstrap 3 шаблон на React приложение. В шаблоне очень много всяких jQuery плагинов, они все работают - но только до перехода куда-нибудь по React-Router (v. 4)

Подключал плагины прямо в index.html и в React Component'ы добавлял - один и тот же результат.

Перепробовал все что нашел в инете.

Например:

import React from 'react';
import $ from 'jquery';
import { smoothlyMenu } from '../layouts/Helpers';
class TopHeader extends React.Component {
    toggleNavigation(e) {
        e.preventDefault();
        $("body").toggleClass("mini-navbar");
        smoothlyMenu();
    }
    render() {
        return (
            <div className="row border-bottom">
                <nav className="navbar" style={{marginBottom: 0}}>
                    <div className="navbar-header">
                        <a onClick={this.toggleNavigation} className='nav-open' href="#">
                            <i className="fa fa-bars"></i> 
                        </a>
                    </div>
                    <ul className="nav navbar-top-links navbar-right">
                        <li>
                            <a href="#">
                                <i className="fa fa-sign-out"></i> Log out
                            </a>
                        </li>
                    </ul>
                </nav>
            </div>
        )
    }
}

Как видно при нажатии должен добавляться класс в body, этого не происходит, даже если срабатывает сама функция toggleNavigation.

Пробовал

()=>toggleNavigation(), 
()=>toggleNavigation.bind(this), 
toggleNavigation()

не знаю зачем. Ничего не изменилось.

В index.html есть что-то типа

$('.nav-open').toggleClass('mini-navbar');

тоже не работает после работы Router'а

Answer 1

Для прямого обращения элементам DOM при вызове сторонней библиотеки, управлением анимацией, выделением текста, или управления воспроизведением медиа - можно использовать ref.

ИМХО: Более уместно было бы переписать участок кода, который отвечает за отображения меню в виде отдельного контейнера который будет отображатся в зависимости от props и state.

READ ALSO
AJAX подгрузка для слайдера

AJAX подгрузка для слайдера

Хэллоу! Как мне сделать AJAX или что-то, типо AJAX подгрузки слайдов в magnific-popup слайдереНужно, чтобы картинка слайдера загружалась только после...

152
Обязательное поле для заполнеия

Обязательное поле для заполнеия

Здравствуйте! Помогите реализовать следующий функционал: Есть форма, где нужно, чтобы после активного чекбокса (нажали на него) поле, находящееся...

215
Аутентификация и создание платежа - PHP

Аутентификация и создание платежа - PHP

Доброго времени суток, дали тестовое задание, необходимо сделать аутентификацию и далее сделать страницу создания платежа, который будет...

286
Проблемы transitions в Google Chrome

Проблемы transitions в Google Chrome

Простой пример: https://codepenio/OneNice_/pen/yKOoJB

270