Ich habe ein ReactJS-Projekt, wo ich JSON vom REST Django-Host bekomme und eine Tabelle mit Filtern dafür erstelle. Ich habe eine Tabellenklasse:Wie man eine Komponente nur einbaut, wenn ich die Klasse reps ändere
class MainTable extends React.Component {
constructor(props) {
super(props);
this.state = {
results: []
};
}
componentDidMount(){
axios.get(this.props.link)
.then(res => {
this.setState({results: res.data.results});
});
}
render() {
return (
<Table hover striped bordered responsive size="sm">
<thead>
<tr>
<th>Name</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{this.state.results.map(result =>
<tr key={result.fileId}>
<td>{result.Name}</td>
<td>{result.Name}</td>
</tr>
)}
</tbody>
</Table>
);
}
}
und Main, wo ich alle Filterklassen laufen:
class Main extends React.Component {
constructor() {
super();
this.state = {
origin: '',
limit: 10
};
this.handleChangeOrigin = this.handleChangeOrigin.bind(this);
this.handleChangeLimit = this.handleChangeLimit.bind(this);
}
handleChangeLimit(event) {
this.setState({limit: event.target.value});
}
handleChangeOrigin(event) {
this.setState({origin: event.target.value});
}
render() {
var link = `http://106.120.89.142:8000/database/?limit=${this.state.limit}&`;
if (this.state.origin){
link += `ORIGIN=${this.state.origin.toLowerCase()}`;
console.log(link)
}
return (
<div>
<div>
<h1 className="jumbotron-heading display-4">Here u got database *_*</h1>
</div>
<div>
<Limit handleChange = {this.handleChangeLimit} />
</div>
<div>
<OriginRow handleChange = {this.handleChangeOrigin} />
</div>
<div id="tableWrapper">
<MainTable link={link} />
</div>
</div>
);
}
}
Und ich habe ein Problem mit ihm, denn wenn ich componentDidMount()
verwenden, meine axios.get(my link to REST JSON)
läuft nur einmal. Wenn ich axios
in Table class render()
verwende, trifft es meinen Server einige Male pro Sekunde. Kann ich die Montage nur durchführen, wenn sich meine Requisiten in der Tischklasse geändert haben?
* "Kann ich die Montage nur durchführen, wenn sich meine Requisiten in der Table-Klasse geändert haben?" * - Meinst du die 'TableMain'-Komponente? Weil 'Table' eine Reaktiv-Bootstrap-Komponente ist. – Chris
'MainTable-Klasse', genau. Entschuldigung, ich könnte genauer sein. –