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

React SVG - zmiana koloru path, kiedy jest ich dużo

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
384 wizyt
pytanie zadane 6 lipca 2022 w JavaScript przez zerakot Obywatel (1,870 p.)

Witam,
mam svg, które zawiera około 1000 potomków path. Importuję je za pomocą

import { ReactComponent as SvgMap } from './ww.svg';
...
return(
  <SvgMap/>
);


i teraz chciałbym zmienić w jednym z path o odpowiednim ID jego fill kolor. Jak mogę to zrobić?

Jeszcze dodam, że najlepiej gdyby nie wiązało się to z ponownym renderowaniem SVG oraz, że kolor path jest generowany m.in na podstawie ID.

1 odpowiedź

0 głosów
odpowiedź 6 lipca 2022 przez ScriptyChris Mędrzec (190,190 p.)

Na oko - nie znając komponentu SvgMap - możesz mu podpiąć ref i gdy on się wyrenderuje, to querySelectorem wyszukać konkretny path po identyfikatorze i zmienić mu styl fill.

Coś w tym stylu:

import { ReactComponent as SvgMap } from './ww.svg';
...

function YourComponent() {
  const svgMapRef = useRef();

  useEffect(() => {
    if (svgMapRef.current) {
      svgMapRef
        .current
        .querySelector( <tutaj_id_patha> )
        .style
        .fill = <nowa_wartość>;
    }
  }, [svgMapRef.current]);

  return (
    <SvgMap ref={svgMapRef}/>
  );
}

 

komentarz 8 lipca 2022 przez zerakot Obywatel (1,870 p.)
Dlaczego w parametrze useEffect jest ref? Nie wywoła to nieskończonej pętli? Skoro będzie wywoływana zmiana ref przy każdej zmianie ref?
komentarz 8 lipca 2022 przez ScriptyChris Mędrzec (190,190 p.)

svgMapRef.current jest przekazany w parametrze do useEffect, żeby ograniczyć wywoływanie jego callbacka tylko do momentów, gdy svgMapRef.current zmieni wartość. Nieskończonej pętli być nie powinno, bo referencja zmieni wartość raczej tylko raz - z null na element DOM.

komentarz 8 lipca 2022 przez ScriptyChris Mędrzec (190,190 p.)

Chociaż być może lepiej jest użyć useCallback żeby nie było odwrotnej sytuacji, że React nie odświeży komponentu, w którym tworzysz ref.

Podobne pytania

0 głosów
0 odpowiedzi 383 wizyt
pytanie zadane 16 kwietnia 2023 w JavaScript przez AgentTecza Obywatel (1,810 p.)
0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 9 lipca 2019 w JavaScript przez bezendu Nowicjusz (190 p.)
+1 głos
1 odpowiedź 1,978 wizyt
pytanie zadane 16 listopada 2021 w HTML i CSS przez TheDarkSide Użytkownik (930 p.)

93,174 zapytań

142,185 odpowiedzi

321,976 komentarzy

62,503 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1389p. - dia-Chann
  2. 1368p. - Łukasz Piwowar
  3. 1360p. - Łukasz Eckert
  4. 1360p. - CC PL
  5. 1344p. - Tomasz Bielak
  6. 1117p. - ssynowiec
  7. 1104p. - Michal Drewniak
  8. 1083p. - Marcin Putra
  9. 1078p. - rucin93
  10. 1071p. - rafalszastok
  11. 1054p. - Adrian Wieprzkowicz
  12. 1047p. - Piotr Aleksandrowicz
  13. 1037p. - Michał Telesz
  14. 1023p. - Mariusz Fornal
  15. 1017p. - Mikbac
Szczegóły i pełne wyniki

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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...