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

[React] Przekazywanie generowanych propsów

Object Storage Arubacloud
0 głosów
336 wizyt
pytanie zadane 20 października 2019 w JavaScript przez Bakr Mądrala (6,850 p.)

Witam,

Mam problem z przekazywaniem wcześniej wygenerowanych propsów do komponentów.

Mam pętle, która generuje wartości kolorów, które to są przekazywane do komponentów w formie propsów.

for (let i = 0; i < quantity; i++) {
      let generatedIndex = getRandomNumber(0, 2)

      while (generatedIndex === prevIndex) {
        generatedIndex = getRandomNumber(0, 2)
      }

      prevIndex = generatedIndex
      let CreatedShape = ShapesArray[generatedIndex]
      shapes.push(<CreatedShape color={choosenColor}/>)
    }
    return shapes

Problem polega na tym, że wszystkie komponenty przyjmują pierwszy wygenerowany kolor jako props, mimo, że w propsach jest przekazywana nowa wartość.

2 odpowiedzi

0 głosów
odpowiedź 20 października 2019 przez DawidK Nałogowiec (37,910 p.)

Nie bardzo rozumiem co robi createdShape (przypuszczam, że ma wybrać kolor z tablicy shapesArray (?) ) nie wiadomo też skąd się wziął choosenColor.

Dopiero uczę się reacta, ale może uda Ci się wywnioskować coś z poniższego kodu (realizuje wyświetlanie kwadratów o 3 różnych kolorach zakładając, że 2 następujące po sobie kolory mają się nie powtórzyć - przynajmniej taką funkcjonalność zrozumiałem z Twojego kodu ;) ).

index.html

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';


ReactDOM.render(<App />, document.getElementById('root'));

App.js

import React,{Component} from 'react';
import CreatedShape from './CreatedShape';

class App extends Component {

    getRandomNumer = (from, to) => {
        return Math.floor(Math.random() * (to - from + 1) ) + from;
    }

    render() {

        let quantity = 5;
        let prevIndex;
        let generatedIndex;
        let shapes = [];
        let colorArray = ['#F00','#0F0','#00F'];

        for(let i=0; i<quantity; i++){
            
            do {
                generatedIndex = this.getRandomNumer(0,2);
            } while (generatedIndex === prevIndex);

            prevIndex = generatedIndex;
            let choosenColor = colorArray[generatedIndex];

            shapes.push(<CreatedShape key={i} color={choosenColor} />);
        }

        return (
            <div>
                {shapes}
            </div>
        )
    }
}

export default App;

komponent CreatedShapes.js

import React,{Component} from 'react';

class CreatedShape extends Component {
    render() {

        const shapeStyle = {
            backgroundColor: this.props.color,
            height: 100,
            width: 100
        }

        return (
            <div style={shapeStyle}>
            </div>
        )
    }
}

export default CreatedShape;

 

0 głosów
odpowiedź 21 października 2019 przez ShiroUmizake Nałogowiec (46,300 p.)

Bo nie możesz sobie od tak zmieniać Props zęwnątrz. Musiałbys stworzyć definicje Props i ją wstrzyknąć do komponentu React zanim on się zainicjuje . Od zmiany stanów jest state a przykład masz poniżej.

 

Przykład wstrzykiwaniem props masz oto taki.

//create-react-class
const reactComponentFactory = (data) => {
    createReactClass.getDefaultProps = () => Object.assign({}, data.props);
   createReactClass.render  = () => data.template;
  return createReactClass;
});

function init(data) {
   let reactComponent = reactComponentFactory(data);
   ReactDOM.render(</reactComponent>, document.getElementById('test');
}

Plus minus coś takiego

 

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
+1 głos
1 odpowiedź 308 wizyt
pytanie zadane 31 stycznia 2022 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)
0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 21 lipca 2022 w JavaScript przez kubekszklany Gaduła (3,190 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...