1

I have a ReactJS app built with react-lazy-load-image-component in order to improve performance.

My code wraps components that take time to initialize with something like:

<h2 className={styles.sectionTitle}>Categories</h2>
<Row>
  {categories &&
    categories.map((category, index) => {
      if (category.image) {
        return (
          <Col
            xs={6}
            md={4}
            key={index}
            className={[
              'col-xs-4 col-md-4 col-lg-4 col-xl-3',
              styles.thumbnail
            ].join(' ')}
          >
            <LazyLoadComponent>
              <CategoryButton {...category} />
            </LazyLoadComponent>
          </Col>
        );
      }
      return null;
    })}
</Row>

It is working fine. However, this there is the lazy-load, SSR prints my markup as:

<h2>Categories</h2>
<div class="row"></div>

I want the server to print everything, so crawlers would have an easy time indexing my pages. The library that I am using supports the visibleByDefault property, which is probably the way to go.

I am just wondering how to pass it from my loader doing:

<Capture report={m => modules.push(m)}>
  <Provider store={store}>
    <StaticRouter location={req.url} context={context}>
      <Frontload isServer={true}>
        <App />
      </Frontload>
    </StaticRouter>
  </Provider>
</Capture>

all the way to each <LazyLoadComponent>?

Suggestions?

1 Answer 1

1

I ended-up doing:

import React from 'react';

import { LazyLoadComponent } from 'react-lazy-load-image-component';
import useSSR from 'use-ssr';

const LazyLoad = ({ children }) => {
  var { isServer } = useSSR();
  return (
    <LazyLoadComponent visibleByDefault={isServer}>
      {children}
    </LazyLoadComponent>
  );
};

export default LazyLoad;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.