Приложение React ищет материал-ui / core в папке Src, а не node_modules

#reactjs #material-ui

#reactjs #материал-пользовательский интерфейс

Вопрос:

Я пытаюсь создать меню ящика пользовательского интерфейса material (но из-за большого количества ссылок мне нужно, чтобы оно было вложенным). Я нашел здесь именно то, что мне нужно, https://medium.com/gammastack/making-a-nested-sidebar-menu-in-react-f8595031995e (То же, что и меню на сайте material-ui)

Я следовал ему до конца (уже много раз), и я получаю эту ошибку

 ./src/MenuBar.jsx
Module not found: Can't resolve 'material-ui/core/Collapse' in 'C:UsersadejoDesktopMUI-problemnested-menusrc'
 

Мне кажется, что он ищет в папке Src все компоненты mui, а не node_modules (где я думал, что это будет). Я довольно новичок во всем этом и обычно справляюсь с помощью Google, но на этом я застрял. Кто-нибудь может подсказать, как решить эту проблему?

Я не включил код, поскольку он точно такой, как на ссылке. Я изменил только то, что указано в ссылке, я поместил файл MenuItems.json в Src, а все остальное осталось таким, как есть.

Код для строки меню

 import React, { Component } from 'react'
import List from 'material-ui/core/List'
import ListItem from 'material-ui/core/ListItem'
import ListItemText from 'material-ui/core/ListItemText'
import Collapse from 'material-ui/core/Collapse'
import ExpandLess from 'material-ui/icons/ExpandLess'
import ExpandMore from 'material-ui/icons/ExpandMore'
import Drawer from 'material-ui/core/Drawer'
import { withStyles } from 'material-ui/core/styles'
import { Link } from 'react-router-dom'
import menuItems from './menuItems'
const styles = {
  list: {
    width: 250,
  },
  links: {
    textDecoration:'none',
  },
  menuHeader: {
    paddingLeft: '30px'
  }
};
class MenuBar extends Component {
  constructor( props ) {
    super( props )
    this.state = {}
  }
// this method sets the current state of a menu item i.e whether it is in expanded or collapsed or a collapsed state
handleClick( item ) {
    this.setState( prevState => ( 
      { [ item ]: !prevState[ item ] } 
    ) )
  }
// if the menu item doesn't have any child, this method simply returns a clickable menu item that redirects to any location and if there is no child this method uses recursion to go until the last level of children and then returns the item by the first condition.
handler( children ) {
    const { classes } = this.props
    const { state } = this
return children.map( ( subOption ) => {
      if ( !subOption.children ) {
        return (
          <div key={ subOption.name }>
            <ListItem 
              button 
              key={ subOption.name }>
              <Link 
                to={ subOption.url }
                className={ classes.links }>
                <ListItemText 
                  inset 
                  primary={ subOption.name } 
                />
              </Link>
            </ListItem>
          </div>
        )
      }
      return (
        <div key={ subOption.name }>
          <ListItem 
            button 
            onClick={ () => this.handleClick( subOption.name ) }>
            <ListItemText 
              inset 
              primary={ subOption.name } />
            { state[ subOption.name ] ? 
              <ExpandLess /> :
              <ExpandMore />
            }
          </ListItem>
          <Collapse 
            in={ state[ subOption.name ] } 
            timeout="auto" 
            unmountOnExit
          >
            { this.handler( subOption.children ) }
          </Collapse>
        </div>
      )
    } )
  }
render() {
    const { classes, drawerOpen, menuOptions } = this.props
    return (
      <div className={classes.list}>
        <Drawer 
          variant="persistent" 
          anchor="left"
          open
          classes={ { paper: classes.list } }>
          <div>
            <List>
              <ListItem 
                key="menuHeading"
                divider
                disableGutters
              >
                <ListItemText
                className={ classes.menuHeader }
                  inset
                  primary="Nested Menu"
                />
              </ListItem>
            { this.handler( menuItems.data ) }
            </List>
          </div>
        </Drawer>
      </div>
    )
  }
}
export default withStyles(styles)(MenuBar)
 

Спасибо

Комментарии:

1. Могу ли я увидеть ваш импорт в файле MenuBar.jsx?

2. Привет, Себастьян, я отредактировал main, чтобы включить код для MenuBar.jsx

Ответ №1:

Пожалуйста, проверьте вашу папку node_modules на наличие папки material-ui. проверьте, является ли это @material-ui или просто material-ui .

ваш импорт неверен. это должно быть следующим образом со знаком @.

например

 import Collapse from '@material-ui/core/Collapse';
 

если у вас недавно установлен material-ui, то это может быть @mui папка с импортом следующим образом

 import Collapse from '@mui/material/Collapse';
 

Комментарии:

1. Да, это сделано, я пробовал, но, должно быть, я что-то пропустил, но, да, теперь все хорошо. Спасибо, чувак