Компонент React JS
В компоненте отрисовываю объект из массива, вставляя значения строк объекта в DOM дерево. Для выделения каждого объекта из массива использую .map Такой вопрос, как разбить строку в объекте на значения, что бы каждое значение из строки объекта можно было отдельно показывать.
array = [ { ...object, name: "Name1, Name, Name3" } ]; import React from 'react'; //redux import { connect } from 'react-redux'; const Projects = ({ projects }) => { return ( <div className="container"> { projects.map((project) => { return ( <div key={project.id}> <div> <h3>{project.label}</h3> <img src={project.image} alt="" /> <div> <p>{project.text}</p> </div> <ul> <li>{project.name}</li> <li>{project.name}</li> <li>{project.name}</li> </ul> </div> </div> ) }) } </div> ) }; const mapStateToProps = ({ projects }) => { return { projects }; }; export default connect(mapStateToProps)(Projects); |
array = [ { ...object, name: "Name1, Name, Name3".split(/,\s/) } ]; <ul> {project.name.map(text => <li>{text}</li>)} </ul> |
Цитата:
projects: [ { id : 1, name: "name1, name2, name3".split(/,\s/) } ] }; import React from 'react'; //redux import { connect } from 'react-redux'; //css import './projects.css'; const Projects = ({ projects }) => { return ( <ul> { projects.name.map((text) => { return ( <li>{text}</li> ) }) } </ul> ) }; const mapStateToProps = ({ projects }) => { return { projects }; }; export default connect(mapStateToProps)(Projects); |
потому что данные надо хранить в нормализованном состоянии, и не писать унылые велосипеды
|
Цитата:
а строку иногда на значения нужно разбивать, если их нужно перечислить в разных тегах. Вот только не понятно как поступать с id, ведь key={array.id} идет в тег, где отрисовываем весь объект, а тут при разделении строки на значения получается опять id нужно будет присваивать тегам куда идут эти значения. import React from 'react'; //redux import { connect } from 'react-redux'; //css import './projects.css'; const Projects = ({ projects }) => { return ( <div> { projects.map((project) => { return ( <div key={project.id}> <div className="card mb-3"> <h3>{project.title}</h3> <img src={project.image} alt="" /> <div className="card-body"> <p>{project.text}</p> </div> <ul> { project.skills.map((skill) => { return ( <li>{skill}</li> ) }) } </ul> </div> </div> ) }) } </div> ) }; const mapStateToProps = ({ projects }) => { return { projects }; }; export default connect(mapStateToProps)(Projects); Вот тут как поступить с unique key? { project.skills.map((skill) => { return ( <li>{skill}</li> ) }) } |
let obj = { projects: [ { id: 1, name: [ "name1", "name2", "name3" ] } ] } project.skills.map((skill) => <li key={skill}>{skill}</li>) у тебя будет дерево (VDOM) project.id -> skills ну и соответственно если есть несколько project.id они не будут пересекаться 1- (прожект) 1.1 - скил1 1.2 - скил2 2- (прожект) 2.1 - скил1 |
[quote=SuperZen;506297]
let obj = { projects: [ { id: 1, skills: [ "skill1", "skill2", "skill3" ] } ] } project.skills.map((skill) => <li key={skill}>{skill}</li>) не очень понимаю откуда в key={skill} возмется id если в skills [] нет такой строчки. И я так понимаю лучше хранить данные массив в массиве, если нужно, а не перечислять в строке? тогда такая приписка не нужна будет? skills: skill1, skill2, skill3".split(/,\s/) Достаточно будет написать так? project.skills.map |
не понятно, что в итоге должно получиться, откуда появляется эта строка, массив и т.д.
может быть ) просто надо про map прочитать внимательнее project.skills.map((skill, id) => <li key={id}>{id} - {skill}</li>) зачем это все? |
Часовой пояс GMT +3, время: 19:56. |