ReactJS — создание динамического списка

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я создаю карточную игру. У меня есть эта база данных json:

 {
  "characters": [   
    {    
      "name": "Character1",
      "punch":12,
      "kick":12,
      "special":15,
      "image":"character1"

    },
    {    
      "name": "Character2",
      "punch":13,
      "kick":11,
      "special":15,
      "image":"character2"  
    },         

    {   
      "name": "Character3",
      "punch":20,
      "kick":19,
      "special":10,
      "image":"character3"   
    }
  ]
}
  

У меня есть этот родительский компонент, который извлекает данные json для передачи дочернему компоненту. Данные успешно извлечены.

 import React, { Component } from 'react'
import Player from './Player'

var data = require('./db.json');

class Stage extends Component {
  constructor(props) {
    super(props)
    this.state = {
      characters: []
    }
  }

  componentDidMount() {
    this.setState({
      characters: data.characters
    })  
  }

  render() {
    return (

      <div className="stage">
      {console.log(this.state.characters)}
        <Player data={this.state.characters}/>
        <Player data={this.state.characters}/>
      </div>
    )
  }
}


export default Stage
  

Теперь я хочу отобразить каждую карточку для каждого символа внутри этого компонента в динамическом режиме <li> . Например, у меня есть 3 символа, поэтому я хочу отобразить 3 карточки. Каждый из них соответствует символу. Как я могу это сделать? Я хочу передать свойства для <Card> компонента в

 import React from 'react'
import Card from './Card'   

const Player = (props) => { 
  return (
    <div className="player">     
      <Card/>  
    </div>
  )
}


export default Player 
  

Комментарии:

1. хорошо, так в чем проблема?

2. Я не знаю, как отобразить динамический html-список, каждый из которых содержит символ, на карточке

3. смотрите второй компонент

4. в качестве хорошей практики и этикета постарайтесь упомянуть, что вы пробовали перед публикацией, сформулируйте свой вопрос в заголовках требований и формулировок проблем. Просто предложение 🙂

Ответ №1:

Для этого вы хотите использовать .map() . По сути, вы берете массив и возвращаете набор компонентов react из этого массива. Например:

 const Player = ({ data }) => { 
  return (
    <div className="player">
      {data.map((character, i) => (     
        <Card key={i} name{character.name}/>  
      ))}
    </div>
  )
}
  

Здесь я передал name ключ в каждую карточку, но вы можете передать все, что хотите (включая весь character объект, если это имеет смысл).

Кроме того, я бы переименовал data в characters , поскольку это имеет больше смысла. И я бы установил значение prop по умолчанию как пустой массив.

Комментарии:

1. Но я хочу сделать это в карточках, а не в игроках

2. Возможно, вам потребуется уточнить, чего вы пытаетесь достичь в этом случае. Ваши данные в формате json представляют собой массив того, что выглядит как символы. Что представляют карточки? Не могли бы вы предоставить, скажем, свой идеальный вывод дерева компонентов или что-то в этом роде? В любом случае, то, что я привел в качестве своего ответа, должно быть тем, что вам концептуально нужно.

3. каждая карточка представляет каждого персонажа

4. ok обновлено. Как вы можете видеть, ответ по-прежнему концептуально тот же.

5. пожалуйста, не забудьте key=[i] для дочернего элемента card.

Ответ №2:

Просто используйте функцию .map() для перебора каждого элемента массива.

.map()

   {data.map((item, i) => (     
    <Card key={i} name={item.name}/>  
  ))}