Material-ui: @ material-ui / styles: ¿Uso en un componente de clase?

Creado en 24 may. 2019  ·  17Comentarios  ·  Fuente: mui-org/material-ui

¿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.
docs question

Comentario más útil

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);

Todos 17 comentarios

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?

  • ¿Pasaste el tema como accesorios?
  • ¿Usó 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.

¿Fue útil esta página
0 / 5 - 0 calificaciones