Como usar a API makeStyles
em um componente de classe? A documentação mostra apenas exemplos para componentes de função.
Quando tento usar isso no método render
um componente de classe, recebo o seguinte erro:
Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.
Você não pode usar os ganchos dentro de um componente de classe. Você precisa de um componente funcional ou de ordem superior ( withStyles
).
Estou encerrando, se virmos relatório semelhante, acho que devemos documentá-lo.
@oliviertassinari : Mas se o app for declarado como uma classe, como faço isso?
Porque no aplicativo eu tenho um estado e outras funções.
@ Angelk90 Você deve usar a API de componente de pedido superior: https://github.com/mui-org/material-ui/issues/15820#issuecomment -495480040 ( withStyles
).
De acordo com sua documentação, o exemplo de uso de withStyles
api ainda é um componente de função.
https://material-ui.com/styles/basics/
É por isso que votei contra sua resposta.
@oliviertassinari
Como posso usar makeStyles com HOC?
De acordo com meu caso de uso, preciso do objeto de tema material em grande estilo.
Como sugerido por @ ghosh-jaideep,
como ter a possibilidade de usar utilitários de tema, como:
[theme.breakpoints.up("md")]: {
paddingLeft: theme.spacing(2),
paddingTop: theme.spacing(2)
}
dentro de um componente de classe?
obrigado
usei withStyles
vez de makeStyle
assim ...
import React from 'react';
import { withStyles } from '@material-ui/core/styles';
const styles = (theme) => ({
fab: {
position: 'fixed',
bottom: theme.spacing(2),
right: theme.spacing(2),
},
});
class LoginComponent extends React?Component {
render() {
const { classes } = this.props;
/** your UI components... */
}
}
export default withStyles(syles)(LoginComponent);
@ Ess-Soft Como LoginComponent
é renderizado a partir de componentes pais?
ThemeProvider
no componente pai?Será mais útil se você compartilhar o trecho de código do componente pai.
Eu fiz a mesma coisa que @ Ess-Soft e adicionei widthTheme antes de withStyles
withTheme(withStyles(useStyles)(LoginComponent ))
então você pode usar theme
mesmo dentro do render
Alguém pode explicar a coisa com estilos. Posso dizer honestamente que quando vejo coisas assim, acho que lol vamos lá cara, o Angular é muito mais normal. 3 horas hoje procurando e procurando respostas e então eu encontro isso.
@ xtianus79 Esta API também funciona com componentes de classe: https://material-ui.com/styles/basics/#higher -order-component-api.
@oliviertassinari você pode mostrar um exemplo disso com a grade? lol isso é o que estou tentando fazer e estou preso aí. Estou usando makeStyles e createStyles e não consigo descobrir como fazer isso sem uma função? Você pode me ajudar com isso.
@ xtianus79 Você encontrará mais ajuda no StackOverflow
@oliviertassinari para esse problema e caso de uso em particular, não vejo.
Ummm. ainda assim https://material-ui.com/styles/basics/#higher -order-component-api não responde como usar 'theme'? por que só oferece suporte a componentes funcionais com ganchos? as pessoas têm código legado ou precisam de componentes baseados em classe.
@DewangS Consulte a API withTheme()
: https://material-ui.com/styles/api/#withtheme -component-component.
Comentários muito úteis
usei
withStyles
vez demakeStyle
assim ...