Мое меню Materialize css sidenav hamburger не работает, когда я перехожу к компоненту React, используя Link или NavLink - PullRequest
0 голосов
/ 21 февраля 2020

В мобильном представлении всякий раз, когда я перехожу к компоненту React, используя Link или NavLink, и браузер не обновляет sh мое материализованное css меню гамбургера sidenav становится неподвижным и не реагирующим на нажатия, но когда я перезагружаю страницу, sidenav меню гамбургера снова станет кликабельным. Я знаю, что это не очень удобно для моего мобильного пользователя. Вместо этого я попытался использовать тег привязки, но цель создания одностраничного приложения будет побеждена, если при каждом клике браузер перезагружается. Любая помощь, подсказка или предложение будут оценены. Вот что я попробовал:

index. html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.jpg" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />

    <link rel="apple-touch-icon" href="logo192.jpg" />

    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />

    <!--Import Google Icon Font-->
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

    <!-- Compiled and minified CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">


    <title>My Website</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>

   <!-- Import JQuery -->
   <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

   <!-- Compiled and minified JavaScript -->
   <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>

   <script>
    $(document).ready(function(){
      $('.sidenav').sidenav();
      $('.datepicker').datepicker();
      $('.modal').modal();
      $('.materialboxed').materialbox();
    });
  </script>
  </body>
</html>

navbar. js

import React from 'react'
import {Link} from 'react-router-dom'
import '../../myStyles/main.css' //my custom css file


const Navbar = () => {
    return (
        <div>
        <nav className="link-nav">
            <div className="nav-wrapper">

            <ul className="center hide-on-med-and-down">
                <li><Link className="link-font-size" to='/'>HOME</Link></li>
                <li><Link className="link-font-size" to='/about'>About</Link></li>
                <li><Link className="link-font-size" to='/contact'>Contact</Link></li>
                <li><Link className="link-font-size" to='/login'>Login</Link></li>
                <li><Link className="link-font-size" to='/signup'>Sign Up</Link></li>
            </ul>
            </div>
        </nav>

        <ul id='mobile-sidenav-menu' className="sidenav">
                <li><Link to="#" className="sidenav-close right pink-text lighten-1">X</Link></li>  <li><Link className="link-font-size" to='/'>HOME</Link></li>
                <li><Link className="link-font-size" to='/about'>About</Link></li>
                <li><Link className="link-font-size" to='/contact'>Contact</Link></li>
                <li><Link className="link-font-size" to='/login'>Login</Link></li>
                <li><Link className="link-font-size" to='/signup'>Sign Up</Link></li>
         </ul>
          <a to="#" className="sidenav-trigger" data-target="mobile-sidenav-menu" >
                <i className="material-icons">menu</i>
            </a>
        </div>
    )
}

export default Navbar

1 Ответ

0 голосов
/ 21 февраля 2020

Помогает ли поместить гамбургер в панель навигации, как указано в материализации css документов ?

<nav className="link-nav">
     <div className="nav-wrapper">
        <a to="#" className="sidenav-trigger" data-target="mobile-sidenav-menu" ><i className="material-icons">menu</i></a>
        <ul className="center hide-on-med-and-down">
            <li><Link className="link-font-size" to='/'>HOME</Link></li>
            <li><Link className="link-font-size" to='/about'>About</Link></li>
            <li><Link className="link-font-size" to='/contact'>Contact</Link></li>
            <li><Link className="link-font-size" to='/login'>Login</Link></li>
            <li><Link className="link-font-size" to='/signup'>Sign Up</Link></li>
        </ul>
    </div>
</nav>

<ul id='mobile-sidenav-menu' className="sidenav">
    <li><Link to="#" className="sidenav-close right pink-text lighten-1">X</Link></li>  <li><Link className="link-font-size" to='/'>HOME</Link></li>
    <li><Link className="link-font-size" to='/about'>About</Link></li>
    <li><Link className="link-font-size" to='/contact'>Contact</Link></li>
    <li><Link className="link-font-size" to='/login'>Login</Link></li>
    <li><Link className="link-font-size" to='/signup'>Sign Up</Link></li>
</ul>

РЕДАКТИРОВАТЬ:

Ваниль JS Инициализация:

 document.addEventListener('DOMContentLoaded', function() {
    var elems = document.querySelectorAll('.sidenav');
    var instances = M.Sidenav.init(elems);
  });

RE НАСТРОЙКА ПРОЕКТА

Оформить заказ на эту статью. Компонент Мэтта настроен так:

 import React from 'react';

 import 'materialize-css/js/waves.js'
 import 'materialize-css/js/buttons.js'
 import 'materialize-css/js/carousel.js'
 import 'materialize-css/sass/materialize.scss'


class App extends React.component {

    componentDidMount() {

        const elems = window.document.querySelectorAll('.carousel');
        const options = {};
        window.M.Carousel.int(elems, options);
    }

    render(){...}

}

Это может пролить свет на него ...?

https://medium.com/@mattdlockyer / youre using materialize- css -Неверный-470b593e78e9

...