Я пытаюсь построить таблицу с динамически reactJS но есть два вопроса, которые я не могу решить:Как построить таблицу динамически
- В компоненте GridList я получил эту строку
<GridRow data={data1} key={i} />
я действительно не хочу, чтобы принести «global» var, но вместо этого используйте данные, которые отправляются методу? Как мне это сделать? - В GridRow мне нужно слишком цикл столбцов (как я сейчас), но мне нужно, чтобы получить правильное значение ячейки и право не я просто не получаю это исключение:
Error while rendering "GridBox" to "react1": Unable to get property 'data' of undefined or null reference
Код
var data1 = {"Columns":[{"Title":"Title1","HTMLClass":"g1_Title"},{"Title":"Title2","HTMLClass":"g2_Title"},{"Title":"Title3","HTMLClass":"g3_Title"}],"Rows":[{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]}]};
var GridRow = React.createClass({
render: function() {
if(this.props.data){
var Cell = this.props.data.Columns.map(function (column, i) {
return (
<div className={column.HTMLClass}>{this.props.data.Cells[i]}</div>
);
})
}
return (
<li>{Cell}</li>
);
}
});
var GridHead = React.createClass({
render: function() {
if(this.props.data){
var Cell = this.props.data.Title;
var HtmlClass = this.props.data.HTMLClass;
}
return (
<div className={HtmlClass}>{Cell}</div>
);
}
});
var GridList = React.createClass({
render: function() {
if(this.props.data){
var Header = this.props.data.Columns.map(function (columns) {
return (
<GridHead data={columns} />
);
});
var Row = this.props.data.Rows.map(function (data, i) {
return (
<GridRow data={data1} key={i} />
);
});
}
return (
<ul>
<li>{Header}</li>
{Row}
</ul>
);
}
});
var GridBox = React.createClass({
render: function(){
return (
<GridList data={data1} />
);
}
});
Спасибо за головокружение по именованию. Но привязка? Как это работает? На самом деле у GridHead Im проблемы с GridRow. – Banshee
Я добавил ответ на ваш комментарий. Также обратите внимание, что при настройке ключа для строки рекомендуется создать его свойство данных, которое может служить уникальным идентификатором для этой строки. Таким образом, если вы добавляете/удаляете/переупорядочиваете строки, их не нужно повторно отображать. – Mark
Спасибо, не могли бы вы подробнее рассказать об уникальных? Вы sugest, что я manully добавить id к элементу HTML, и при удалении я делаю это также вручную с javascript, а не заставляя rerender? Я думал, что виртул-домик с реендером был целым смыслом реакции? – Banshee