I am trying to create a react.js table that syncs with a leaflet map. I have this data and I am able to get the data properly, but I cannot create a table correctly. I am able to see the headers because they are hardcoded, but I am not able to see the rows. I also have a picture to explain the data at the console.log() points in the code. Here is the code:
/* Table React Component */
var TABLE_CONFIG = {
sort: { column: "Zone", order: "desc" },
columns: {
col1: { name: "Zone", filterText: "", defaultSortOrder: "desc" },
col2: { name: "Population", filterText: "", defaultSortOrder: "desc" }
}
};
var Table = React.createClass({
getInitialState: function() {
var tabledata = [];
var length = _.size(testJSON.zones);
for(i = 0; i < length; i++) {
var name = _.keys(testJSON.zones)[i];
var population = testJSON.zones[name].population.value;
if(name == "default") {
population = testJSON.zones[name].population.default.value;
}
tabledata[i] = {name, population};
}
console.log(tabledata);
return {zones: tabledata};
},
render: function() {
var rows = [];
this.state.zones.forEach(function(zone) {
rows.push(<tr Population={zone.population} Zone={zone.name} />);
}.bind(this));
console.log(rows);
return (
<table>
<thead>
<tr>
<th>Zone</th>
<th>Population</th>
</tr>
</thead>
<tbody>{rows}</tbody>
</table>
);
}
});
Here you can see the console.log(tabledata)
line in full as well as the first object in console.log(rows)
I would like to see something like the picture below. Please note I want to Zone column to not be editable input, but the population to be editable:
We just need to put the react-table props from the Hooks, and it will do its magic automatically */ return ( <table className="data-table" {... getTableProps()}> <thead> {headerGroups.
To create a dynamic table in Excel, we have two different methods: making a table of the data from the table section while another using the offset function. The reports and pivot tables also change as the data in the dynamic table changes in dynamic tables.
<tr Population={zone.population} Zone={zone.name} />
does not seem like a valid React component to me. The lowercase <tr>
indicates that this is not a custom component, but represents a standard HTML table row. <tr>
elements require <td>
or <th>
elements inside them, for example:
var rows = [];
this.state.zones.forEach(function(zone) {
rows.push(
<tr />
<td><SomePopulationComponent /></td>
<td><SomeZoneComponent /></td>
</tr>
);
}.bind(this));
You could extract this into a custom element:
var CustomRow = React.createClass({
render: function() {
return (
<tr>
<td>{this.props.Population}</td>
<td>{this.props.Zone}</td>
</tr>
);
}
});
// ...
var rows = [];
this.state.zones.forEach(function(zone) {
rows.push(<CustomRow Population={zone.population} Zone={zone.name} />);
}.bind(this));
Also, don't forget to give elements generated from inside a map
/foreach
function a key
attribute.
I have made this dynamic data table with dynamic rows and columns editable
class App extends React.Component {
constructor(props){
super(props);
this.state = {
data: [
{'id':1,1:'',2:'Class1',3:'Class2',4:'Class3',5:'Class4',6:'Class5',7:'Class6'},
{'id':2,1:'MONDAY',2:'1',3:'2',4:'3',5:'4',6:'5',7:'6'},
{'id':3,1:'TUESDAY',2:'1',3:'2',4:'3',5:'4',6:'5',7:'6'},
{'id':4,1:'WEDNESDAY',2:'1',3:'2',4:'3',5:'4',6:'5',7:'6'},
{'id':5,1:'THURSDAY',2:'1',3:'2',4:'3',5:'4',6:'5',7:'6'},
{'id':6,1:'FRIDAY',2:'1',3:'2',4:'3',5:'4',6:'5',7:'6'}
],
errorInput:''
};
this.submitStepSignupForm = this.submitStepSignupForm.bind(this);
this.appendColumn = this.appendColumn.bind(this);
// this.editColumn = this.editColumn.bind(this);
}
render(){
let tableStyle = {
align:"center"
};
let list = this.state.data.map(p =>{
return (
<tr className="grey2" key={p.id}>
{Object.keys(p).filter(k => k !== 'id').map(k => {
return (
<td className="grey1" key={p.id + '' + k}>
<div suppressContentEditableWarning="true" contentEditable="true" value={k} onInput={this.editColumn.bind(this,{p},{k})}>
{p[k]}
</div>
</td>
);
})}
</tr>
);
});
return (
<fieldset className="step-4">
<div className="heading">
<h3>Tell us about your schedule</h3>
<p>Dynamic Data Table by Rohan Arihant</p>
</div>
<div className="schedule padd-lr">
<table cellSpacing="3" id="mytable" style={tableStyle}>
<tbody>{list}</tbody>
</table>
</div>
</fieldset>
);
}
}
https://codepen.io/rohanarihant/pen/qmjKpj
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With