Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

223
Visualizações
Component is briefly rendering without styles on first render

When I open my react app, the component below flashes with width:100%, probably because it inherits it from the material-ui card.

In my react app there are a lot of these components being rendered, each with their own width which are based on the parent component's data. I set the width with an inline style based on the props.

As I understand, the component has the inline style as it is created and there should be no delay to apply it. However I see all the SceneThumb components with 100% width for a a fraction of a second, before they apply the given inline style.

If I change the css of scene-thumb-parent to include some width, say 10% for example, then I'll see them all with 10% for a fraction of a second, before the inline style is applied. That makes me think there is a delay in applying inline css, but it really puzzles me..

Is this to be expected of react? Or of html in general? Is there any way to reduce this inline style application delay? Maybe it's something to do with the dev hot reloading setup I get from create-react-app?

SceneThumb.js (code that is irrelevant to the question has been omitted):

import React, { Component } from 'react';
import './scene-thumb.css';
import Card from 'material-ui/Card';

class SceneThumb extends Component {
  render() {
    return (
      <div
        className='scene-thumb-parent'
        style={{width:this.props.width, left:this.props.left}}
      >
        <Card
          className={this.props.selected?'scene-thumb-selected':'scene-thumb'}
        >
          <span>
              Hello world!
          </span>
        </Card>
      </div>
    );
  }
}

export default SceneThumb;

scene-thumb.css:

.scene-thumb-parent {
  position:relative;
  text-overflow:clip;
  white-space:nowrap;
  overflow:hidden;
  min-width: 12px;
}

.scene-thumb-selected {
  border: 2px solid red;
  border-radius: 5px;
}
.scene-thumb,.scene-thumb-selected {
  padding: 2px;
  margin:2px;
  position:relative;
}
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

The width prop is initially null or some other value. A moment later, the prop is updated which triggers another render. This is why you're seeing the flash you're talking about.

You can test this by adding the following to your render() function:

console.log(this.props.width)

You'll probably see it logging at least twice with different values.

There are many ways you can fix this. What makes most sense would depend on the rest of the application, and your personal preference. Regardless, here's one way:

render() {
  if(!this.props.width) return null; //if it's null, render nothing.
  return (
    <div className='scene-thumb-parent' style={{width:this.props.width, left:this.props.left}}>
      <Card className={this.props.selected?'scene-thumb-selected':'scene-thumb'}>
        <span>Hello world!</span>
      </Card>
    </div>
  );
}
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda