Alors dis que j'ai un tableau
var arr=["one", "two", "three", "four"];
et j'ai un composant CardContainer
class CardContainer extends React.Component {
render() {
return (
<div>
<Card/>
</div>
);
}
}
ce que j'essaie de faire est de créer un nombre de composants de carte en fonction de la longueur/du nombre de tableaux "arr", de
class Card extends React.Component {
render() {
return (
<div>
<!--Print arr[i] val using this.props? -->
</div>
);
}
}
Donc, ma sortie sera 4 cartes avec les valeurs de tableau, Imprimées sur chaque carte individuellement.
C’est ce que j’ai trouvé sans succès
class CardContainer extends React.Component {
render() {
var arr=["one", "two", "three", "four"];
var elements=[];
for(var i=0;i<arr.length;i++){
elements.Push(<Card value=arr[i]/>);
}
return (
<div>
{elements}
</div>
);
}
}
Vous étiez proche, vous avez seulement oublié de renseigner le tableau elements
avec les cartes. Il est donc vide après la fin de la boucle. Et bien que l'utilisation de map
, comme le suggèrent d'autres personnes, soit la manière la plus idiomatique de le faire dans React, elle génère tout simplement un tableau de composants pouvant être générés à l'aide d'une boucle for
:
https://jsfiddle.net/mn0jy5v5/
class Card extends React.Component {
render() {
return (
<div>
{ this.props.value }
</div>
);
}
}
class CardContainer extends React.Component {
render() {
var arr=["one", "two", "three", "four"];
var elements=[];
for(var i=0;i<arr.length;i++){
// Push the component to elements!
elements.Push(<Card value={ arr[i] } />);
}
/* the for loop above is essentially the same as
elements = arr.map( item => <Card value={ item } /> );
The result is an array of four Card components. */
return (
<div>
{elements}
</div>
);
}
}
Vous avez presque tout compris!
Vous avez manqué les accolades autour de arr[i]
. Donc, un code de travail ressemblerait à ceci:
class CardContainer extends React.Component {
render() {
var arr=["one", "two", "three", "four"];
var elements=[];
for(var i=0;i<arr.length;i++){
elements.Push(<Card value={arr[i]} />);
}
return (
<div>
{elements}
</div>
);
}
}
Cependant, je vous suggère d'utiliser map()
pour parcourir le tableau:
map
appelle une fonction de rappel fournie une fois pour chaque élément d'un tableau, dans l'ordre, et construit un nouveau tableau à partir des résultats.
Alors essayez ceci:
class CardContainer extends React.Component {
render() {
var arr=["one", "two", "three", "four"];
return (
<div>
{arr.map(item => <Card key={item} value={item} />)}
</div>
);
}
}
Vous pouvez alors accéder à votre valeur dans Card
comme ceci:
class Card extends React.Component {
render() {
return (
<div>
{this.props.value}
</div>
);
}
}
Vous pouvez également réécrire votre composant Card
dans un composant fonctionnel sans état , comme ceci:
const Card = (props) =>
return (
<div>
{props.value}
</div>
);
}
si vous le voulez plus compact:
const Card = props => <div>{props.value}</div>
essayez ceci en utilisant la carte
class CardContainer extends React.Component {
render() {
var arr=["one", "two", "three", "four"];
return (
<div>
{
arr.map(function(value,i)
{
return <Card value={value} key={i}/>
}
)
}
</div>
);
}
}
Vous devez utiliser la méthode .map https://facebook.github.io/react/docs/lists-and-keys.html
render() {
var arr=["one", "two", "three", "four"];
return (
<div>
(
arr.map((item, index) => {
<Card value={item} key={index} />
});
)
</div>
);
}
https://jsfiddle.net/69z2wepo/83859/
class CardContainer extends React.Component {
constructor(props){
super(props);
this.props=props;
this.arr=["one", "two", "three", "four"];
}
render() {
return (
<div>
<Card arr={this.arr}/> //pass your props value
</div>
);
}
}
your cards class here
class Card extends React.Component {
constructor(props){
super(props);
this.props=props; //set props value
}
render() {
return (
<div>
{
// itterate through the array
this.props.arr.map((value,index)=>(
<div key={index}>{value}</div>
))
}
</div>
);
}
}