• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wczytywanie grafik w aplikacji React

VPS Starter Arubacloud
0 głosów
134 wizyt
pytanie zadane 19 czerwca w JavaScript przez Bartłomiej Sikora Użytkownik (750 p.)

Witam,
tworzę aplikację React (typescript) i mam pewien problem z ikonami. Aplikacja posiada wiele ikon, są one przechowywane w plikach svg i wyświetlane w znaczniku img.

/* Przykład */

import icon from '../icons/icon.svg'

const Component = () => {
   return <>
      <img src={icon} alt='Ikona' />
   </>
}

export default Component

Problem polega na tym, że gdy jakiś komponent jest renderowany, to ikona doczytuje się dopiero po krótkiej chwili. 

W jaki sposób mogę wczytać wszystkie ikony do pamięci przeglądarki na samym początku, aby później nie doczytywały się z opóźnieniem? 

Czy dobrym pomysłem było by utworzenie komponentów dla ikon, które zwracały by kod svg? (Aktualnie aplikacja wykorzystuje ponad 60 ikon, choć ze wzglądu na warianty kolorystyczne liczba potencjalnych komponentów byłaby nieco mniejsza). Chodzi mi o coś w tym stylu:

const IconA = () => {
   return <svg width="25" /* [...] */ >
       /* [...] */
   </svg>
}

export default IconA

Dziękuję!

2 odpowiedzi

+2 głosów
odpowiedź 19 czerwca przez Wiciorny Ekspert (277,560 p.)

Spróbuj dodać preload do ikonek, ale to też ingerencja w plik HTML globalnie w sekcji head

  <link rel="preload" href="/path/to/icon.svg" as="image">

React ma biblioteke do svg : react-svg

Wtedy możesz to wykorzystać tworząc bezpośrednio komponent: 
 

import { ReactSVG } from 'react-svg'

const IconComponent = () => (
  <ReactSVG src="path/to/icon.svg" />
);

export default IconComponent;

Możesz skorzystać ze stanu aplikacji i ładować ikonki, zanim generalnie strona zostanie załadowana: 
Używasz wtedy state i  onLoad image https://stackoverflow.com/questions/43115246/how-to-detect-when-a-image-is-loaded-that-is-provided-via-props-and-change-sta/59396181#59396181|

Popatrz sobie na ten przykład w code-sanboxie
https://codesandbox.io/s/angry-artem-zszyqs

0 głosów
odpowiedź 1 października przez Pabiak Gaduła (4,490 p.)

Hej, jeśli korzystasz z vite, to możesz wykorzystać vite-plugin-svgr. Używam prywatnie jak i w pracy i nie zauważyłem żeby ikony ładowały się z opóźnieniem

Podobne pytania

0 głosów
1 odpowiedź 241 wizyt
+2 głosów
1 odpowiedź 366 wizyt
+1 głos
1 odpowiedź 685 wizyt
pytanie zadane 18 lutego 2022 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...