Ich habe ein Kind Komponente Tabelle, dass jedes Mal seine Zustandsänderungen gemacht werden muss, sondern auch, manchmal, wenn neue Requisiten aus dem übergeordneten ankommen;ReactJS Komponente Entscheidung Requisiten oder Zustand verwenden zu machen
Die Tabelle Komponente soll wiederverwendbar sein und behandelt seinen eigenen Zustand. Wenn sich die Breite ändert, benutze ich setState (newTableWidth), um die Tabelle neu zu rendern (so weit, so gut).
Die Mutter app Projekt ist derjenige, der die Tabelle Komponente erstellt und passiert Anfangsbreite.
Das Problem: Nach Änderungen in der übergeordneten App (oder in verschiedenen Unterkomponenten), ich mag den props.tableWidth aktualisieren und neu rendern Tabelle. Aber es gibt andere Szenarien, in denen Projekt rendert Tabelle ohne Aktualisierung der props.tableWidth.
Wie kann Tabelle wissen, wann sich mit den Requisiten zu rendern und wann selbst mit dem Zustand zu rendern?
Code-Beispiel:
class Table extends React.Component {
constructor(props) {
this.state = {
tableWidth: this.props.tableWidth
columnOrder
};
}
onWidthChange(newWidth){
this.setState({tableWidth:newWidth})
}
}
class Project extends React.Component {
render(){
if (this.onChangeTableWidth()){
let width = this.calculateTableWidth();
}
<Table tableWidth = {width}/>
}
}
aber was ist, wenn es keine Änderung in Requisiten gibt, aber ich möchte _Table_ Requisiten anstelle von Zustand verwenden? zum Beispiel: ich mache _Table_ mit Requisiten: table = 100 nun geändert _Table_ seinen Zustand zu table = 200 und jetzt _Project_ Komponente ausgelöst onChangeTableWidth() und muß _Table_ wieder macht wieder mit table = 100 in diesem Fall Requisiten änderte sich nicht so meine tableWidth wird 200 sein und nicht 100 –
Ich würde sagen, nur Container (Eltern) Komponente verantwortlich für die Änderung der Tabelle Width, zum Beispiel übergeben eine Funktion über Requisiten, die als 'onChangeTableWidth (Breite)' handeln würde Handler, und halten Sie die Breite im Container, oder zumindest immer die Breite, die Sie über Funktionsparameter erhalten haben. Auf diese Weise gibt es nur eine Wahrheitsquelle, nämlich die Containerkomponente, und es gibt niemals Verwirrung darüber, auf welche Weise die Breite festgelegt wurde, da sie immer noch auf die gleiche Weise aktualisiert wird. Wie bereits erwähnt, könnten Sie jedoch auch einen Mechanismus zur Zustandsverwaltung verwenden. Ich empfehle Ihnen, Redux oder Mobx zu betrachten. –