Я использую ReactJS + nextJS + Semantic-UI-React
У меня есть ответ json, подобный этому.
[
{
"artist": "Cardi B",
"dob": "01/01/1990",
"albums":[
{
"title": "Invasion of privacy",
"year": "2018"
}
],
"country": "usa"
},
{
"artist": "Michael Jackson",
"dob": "01/01/1950",
"albums":[
{
"title": "Thriller",
"year": "1981"
},
{
"title": "Blood On The Dance Floor",
"year": "1995"
}
],
"country": "usa"
}
]
Я хотел бы показать каждого художника в строке таблицы.Альбомы исполнителя отображаются при щелчке по какой-либо ячейке строки исполнителя.
У меня есть 2 компонента.Один для художника и один для альбома.AlbumTable
компонент - это, по сути, еще одна таблица, обернутая внутри <Table.Row>
.В основном приведенный ниже код работает просто отлично.
toggleVisibility(index){
let oldSt = this.state.AlbumStatus;
oldSt[index] = !oldSt[index];
this.setState({AlbumStatus: oldSt});
}
renderResult(){
let rows = this.props.artists.map((r, index) =>{
return(
<Table.Body key={index}>
<Table.Row >
<Table.Cell>{r.artist}</Table.Cell>
<Table.Cell>{r.dob}</Table.Cell>
<Table.Cell onClick={() => this.toggleVisibility(index)}>+</Table.Cell>
<Table.Cell>{r.country}</Table.Cell>
</Table.Row>
<AlbumRow result={r.albums} hiddenStatus={!this.state.AlbumStatus[index]} />
</Table.Body>
);
});
return rows;
}
render(){
return(
<Table >
<Table.Header >
<Table.Row>
<Table.HeaderCell >Artists</Table.HeaderCell>
<Table.HeaderCell >Dob</Table.HeaderCell>
<Table.HeaderCell >Albums</Table.HeaderCell>
</Table.Row>
</Table.Header>
{this.renderResult()}
</Table>
);
}
Мое требование - показывать альбомы только в том случае, если нажата кнопка «+» в строке артиста.Я могу переключать видимость, используя приведенный выше код.
Проблема:
Если я нажму знак «+» в строке «Майкл Джексон», его соответствующие альбомы будутотображается.однако все альбомы исполнителя также перерисованы.Это ожидается?Это вызовет проблемы с производительностью для больших наборов данных?Каков наилучший подход без существенного влияния на производительность?