Преобразование класса в функцию Ошибка реакции недопустимый вызов перехвата

#javascript #reactjs #redux #material-ui #react-hooks

#javascript #reactjs #redux #материал-пользовательский интерфейс #реагирующие перехваты

Вопрос:

Я преобразовывал компоненты своего класса в функции, но я застрял на этой ошибке перехвата, связанной с моим экспортом по умолчанию. Я уверен, что это что-то простое, но я не могу найти ответ, который ищу.

Скриншот ошибки

Это код, вызывающий ошибку:

 import React from 'react'
import {AppBar, Toolbar, Button, Typography, makeStyles} from '@material-ui/core'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import Menu from './Menu'

const useStyles = makeStyles((theme) => ({
    header: {
        backgroundColor: "#1d3834",

    },
    root: {
      flexGrow: 1,
    },
    menuButton: {
      marginRight: theme.spacing(2),
    },
    title: {
      flexGrow: 1,
    },
  }))

function Header(props) {
    const classes = useStyles()

    const renderContent = () => {
        switch (props.auth) {
            case null:
                return
            case false:
                return (                  
                    <Button color="inherit" href="/signin">Sign In</Button>
                )
            default: 
                return  (
                    <Button color="inherit" href="/api/logout">Sign Out</Button>
                )
        }
    }
    
     return(
        <div className={classes.root}>
        <AppBar position="static" className={classes.header}>
            <Toolbar>
            <Menu/>
            <Typography variant="h6" className={classes.title} >
            <Link 
                to={props.auth ? '/items' : '/'} 
                className="left brand-logo"
            >
                
            </Link>
            </Typography>
                {renderContent()}
            </Toolbar>
        </AppBar>   
        </div>    
     );
    
}

function mapStateToProps({auth}) {
    return{ auth }
}

export default connect(mapStateToProps)(makeStyles(useStyles) (Header))
  

Я надеюсь, что кто-то сталкивался с подобной проблемой раньше и сможет дать мне обратную связь, спасибо 🙂

Ответ №1:

Основная проблема заключается в том, как вы export используете свой компонент. Попробуйте вместо этого выполнить следующее:

 export default connect(mapStateToProps)(Header)
  

На самом деле вам не нужна эта makeStyles(useStyles) часть.


1 предложение — не связано с вопросом:

Это предложение не связано с самим вопросом, это всего лишь небольшое улучшение того, как мне нравится организовывать makeStyles материал в моем репозитории кода с помощью Material-UI.

Обычно я создаю styles.tsx , который в вашем случае выглядел бы следующим образом, помещенный рядом с вашим файлом компонента:

 import { makeStyles } from "@material-ui/core"

const useStyles = makeStyles((theme) => ({
    header: {
        backgroundColor: "#1d3834",
    },
    root: {
      flexGrow: 1,
    },
    menuButton: {
      marginRight: theme.spacing(2),
    },
    title: {
      flexGrow: 1,
    },
}))

export default useStyles
  

Затем import в компоненте следующим образом:

 import useStyles from "./styles"
  

И использование аналогично, как в вашем компоненте:

 function Header(props) {
    const classes = useStyles()

    // ... rest of your component
}
  

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

1. Это сработало, я чувствую, что пробовал это раньше, но я не был достаточно тщательным. Также я определенно собираюсь принять ваше предложение о переносе стилей в их собственный файл, спасибо 🙂

2. @Erykj97 Потрясающе, рад помочь!