Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

221
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!