¿Cómo se usa la API makeStyles
dentro de un componente de clase? La documentación solo muestra ejemplos de componentes de funciones.
Cuando trato de usar esto dentro del método render
un componente de clase, obtengo el siguiente error:
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.
No puede usar los ganchos dentro de un componente de clase. Necesita un componente funcional o utilizar el orden superior ( withStyles
).
Estoy cerrando, si vemos un informe similar, creo que deberíamos documentarlo.
@oliviertassinari : Pero si la aplicación se declara como una clase, ¿cómo lo hago?
Porque en la aplicación tengo un estado y otras funciones.
@ Angelk90 Debe utilizar la API de componentes de orden superior: https://github.com/mui-org/material-ui/issues/15820#issuecomment -495480040 ( withStyles
).
De acuerdo con su documentación, el ejemplo de uso de withStyles
api sigue siendo un componente de función.
https://material-ui.com/styles/basics/
Por eso voté en contra de tu respuesta.
@oliviertassinari
¿Cómo puedo usar makeStyles con HOC?
Según mi caso de uso, necesito el objeto de tema material con estilo.
Como lo sugirió @ ghosh-jaideep,
cómo tener la posibilidad de utilizar utilidades temáticas como:
[theme.breakpoints.up("md")]: {
paddingLeft: theme.spacing(2),
paddingTop: theme.spacing(2)
}
dentro de un componente de clase?
Gracias
Usé withStyles
lugar de makeStyle
así ...
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 ¿Cómo se procesa LoginComponent
partir de los componentes principales?
ThemeProvider
en el componente principal?Será más útil si comparte un fragmento de código del componente principal.
Hice lo mismo que @ Ess-Soft y agregué widthTheme antes conStyles
withTheme(withStyles(useStyles)(LoginComponent ))
entonces puede usar theme
incluso dentro de render
¿Alguien puede explicar lo de los estilos? Honestamente puedo decir que cuando veo cosas como esta, creo que jajaja, vamos, Angular es mucho más normal. Hoy 3 horas buscando y buscando respuestas y luego encuentro esto.
@ xtianus79 Esta API también funciona con componentes de clase: https://material-ui.com/styles/basics/#higher -order-component-api.
@oliviertassinari ¿puedes mostrar un ejemplo de ello con la cuadrícula? jajaja, eso es lo que estoy tratando de hacer y estoy atrapado allí. Estoy usando makeStyles y createStyles y no puedo entender cómo hacerlo sin una función. Puedes ayudar con eso.
@ xtianus79 Encontrarás más ayuda en StackOverflow
@oliviertassinari para ese problema en particular y caso de uso no lo veo.
Ummm. ¿Aún así https://material-ui.com/styles/basics/#higher -order-component-api no responde cómo usar 'theme'? ¿Por qué solo admite componentes funcionales con Hooks? la gente tiene código heredado o la necesidad de componentes basados en clases.
@DewangS Vea la API withTheme()
: https://material-ui.com/styles/api/#withtheme -component-component.
Comentario más útil
Usé
withStyles
lugar demakeStyle
así ...