React Masonry Layout - блоки не выстраиваются, пока не поменяешь разрешение окна браузера

Использую модуль react-masonry-infinite (построен на react masonry layout). При загрузке блоки выстраиваются в несколько колонок:Несколько ровных колонок с большим пространством между ними

Если подвигать край экрана, поменять его ширину, то галерея выстраивается как надо.

Логика такая - если данные об изображениях загрузились с сервака, мы их мапим, результат закидываем в стейт (state.photos). А потом отдаём их плагину, чтобы он построил галерею. Сначала результаты мапинга напрямую отдавались в плагин, стейт появился в ходе экспериментов, эффект тот же. Именно смена разрешения является триггером для правильного построения галереи.

Контейнер (фрагмент):

    if (
    props.state.serverDataIsLoaded === true &&
    props.state.photosIsLoaded === false &&
    props.state.serverDataIsFetching === false // Возможно, лишнее
  ) {
    mappedPhotos = props.state.serverData.results.map ((e, i) => (
      <li className={s.main__box} key={i}>
        <button
          className={e.liked_by_user ? '' : s.main__liked_false}
          onClick={() => toggleLike (e.id, e.liked_by_user)}
        >
          {e.likes}
        </button>
        <img id={e.id} src={e.urls.small} alt={e.alt_description} key={i} />
        <div className={s.main__description}>
          <a href={e.user.links.html} className={s.main__author}>
            {e.user.username}
          </a>
          <p className={s.main__date}>
            {e.created_at.slice (0, 10).replace (/-/g, '.')}
          </p>
        </div>
      </li>
    ));
    props.dispatch (setPhotosAC (mappedPhotos));
  }

  return (
    <MainAuthorized
      dataLength={dataLength}
      fetchMoreData={fetchMoreData}
      photos={props.state.photos}
    />
  );
};

reducer (фрагмент):

 case SET_PHOTOS: {
      state.photos = action.photos;
      state.photosIsLoaded = true;
      return state;
    }

Презентационная компонента (полная):

import React from 'react';
import MasonryInfiniteScroller from 'react-masonry-infinite';
import s from './MainAuthorized.module.scss';

const MainAuthorized = props => {
  // debugger;
  return (
    <main>
      <MasonryInfiniteScroller
        hasMore={false}
        loadMore={props.fetchMoreData}      
      >

        {props.photos}

      </MasonryInfiniteScroller>

      <button className={s.main__moreCats}>More cats!</button>
    </main>
  );
};

export default MainAuthorized;

Ответы (0 шт):