Выбор компонента со случайным стилем в React.js

У меня, наверное, есть невозможное, что я хотел бы сделать для своего сайта-портфолио. Я хочу использовать библиотеку React-Burger-Menu и импортировать все компоненты меню и выбирать один случайным образом при загрузке экрана. Я решил создать массив со всем импортом и использовать функцию math.random, чтобы посмотреть, сработает ли это. Конечно, нет. Я понимаю, что это, наверное, действительно глупо, но я думаю, было бы так здорово, если бы это сработало. Вот что у меня есть для случайной функции:

import { slide as Menu0 } from 'react-burger-menu';
import { stack as Menu1 } from 'react-burger-menu';
import { elastic as Menu2 } from 'react-burger-menu';
import { bubble as Menu3 } from 'react-burger-menu';
import { push as Menu4 } from 'react-burger-menu';
import { pushRotate as Menu5 } from 'react-burger-menu';
import { scaleDown as Menu6 } from 'react-burger-menu';
import { scaleRotate as Menu7 } from 'react-burger-menu';
import { fallDown as Menu8 } from 'react-burger-menu';
import { reveal as Menu9 } from 'react-burger-menu';

Menus = Array[Menu0, Menu1, Menu2, Menu3, Menu4, Menu5, Menu6, 
Menu7, Menu8, Menu9]

var Menu = Menus[Math.floor(Math.random() * Menus.length)];

export default Menu;

И здесь, как написано в документации, я оборачиваю свою навигацию тегами <Menu></Menu>. Вот код:

import Menu from './sidebar';
import Contact from "../pages/contact";
import Portfolio from "../pages/portfolio";
import Index from "../pages/index";
import "../styles/customnav.css";

class customnav extends Component {
  render() {
    return (
      <Menu>
        <HashRouter>
          <div>
           <nav className = "stroke">
            <ul className = "menu">
            <li>
              <NavLink className = "menu-item" to = "/">
                Home
            </NavLink>
            </li>
            <li>
              <NavLink className = "menu-item" to = "/portfolio">
                Portfolio
            </NavLink>
            </li>
            <li>
              <NavLink className = "menu-item" to = "/contact">
                Contact
            </NavLink>
            </li>
          </ul>

          <Route exact path = "/" component = {Index} />
          <Route path = "/portfolio" component = {Portfolio} />
          <Route path = "/contact" component = {Contact} />
          </nav>
         </div>
      </HashRouter>
     </Menu>
    );
 }
}

экспорт customnav по умолчанию;

Вот код ошибки: Cannot read property 'length' of undefined

Я понимаю, что это натянуто, но спасибо за помощь.

Вы бы опубликовали сообщение об ошибке, а также код, который импортирует Menu?

dance2die 26.07.2018 01:53

@SungKim Я пошел дальше и изменил OP, спасибо

G.Rose 26.07.2018 01:55

Ваш синтаксис неверен. Вам не нужен Array в начале массива меню. Также используйте правильное объявление переменной с let/const. Например, const Menus = [Menu0, Menu1, ...]

Jayce444 26.07.2018 01:58

@ Jayce444 Я думаю, что это исправлено. Ничего не отображается, но визуализируется, поэтому мне интересно, нужно ли мне просто отредактировать свой CSS. Большое спасибо. Я слишком привык к ES5

G.Rose 26.07.2018 02:00

@ Jayce444, как вы думаете, есть хороший способ проверить, работает это или нет? В инструментах разработчика отображается, что меню отображается, но на самом деле я его не вижу.

G.Rose 26.07.2018 02:15

Вы уже знаете, что рендеринг работает. Звучит как проблема с CSS, хотя сложно сказать. У меня нет опыта работы с этим конкретным модулем.

Jayce444 26.07.2018 02:49

@ Jayce444 Спасибо за вашу помощь. Это действительно работает, и я возился с css. Заботиться!

G.Rose 26.07.2018 04:17
Поведение ключевого слова "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
7
287
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При использовании Array для создания массива необходимо использовать Array(), а не Array[].

Демо

console.info(Array[1,2,3]);
console.info(Array(1,2,3));
// OR
console.info([1,2,3]);

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

G.Rose 26.07.2018 02:17
Ответ принят как подходящий

Неправильный синтаксис массива, вы можете просто сделать

import { slide as Menu0 } from 'react-burger-menu';
import { stack as Menu1 } from 'react-burger-menu';
import { elastic as Menu2 } from 'react-burger-menu';
import { bubble as Menu3 } from 'react-burger-menu';
import { push as Menu4 } from 'react-burger-menu';
import { pushRotate as Menu5 } from 'react-burger-menu';
import { scaleDown as Menu6 } from 'react-burger-menu';
import { scaleRotate as Menu7 } from 'react-burger-menu';
import { fallDown as Menu8 } from 'react-burger-menu';
import { reveal as Menu9 } from 'react-burger-menu';

const Menus = [Menu0, Menu1, Menu2, Menu3, Menu4, Menu5, Menu6, 
Menu7, Menu8, Menu9];

const Menu = Menus[Math.floor(Math.random() * Menus.length)];

export default Menu;

Есть ли способ проверить это?

G.Rose 26.07.2018 02:22

@ G.Rose Поскольку вы использовали случайную функцию, вы не можете проверить свой вывод, все зависит от вашего кода. Однако вы можете заглушить метод Math.random, чтобы он всегда получал определенное число, и сравнивал результат с ожидаемым.

Anthony Liu 28.07.2018 09:20

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