Wie update-Komponente Staat auf redux Zustand zu ändern?
Da habe ich eine Komponente mit Formen, ich brauche die Formen angeschlossen werden, um den Komponentenstatus. Die ersten Daten stammen von Redux also versuchen zu initialisieren und aktualisieren Sie die Komponente, indem Sie die Einstellung zum Staat mit den Requisiten:
componentWillMount = () => {
this.setState({
language: this.props.language || 'en'
})
}
language
ist eine verbundene requisite und ich überprüft, dass es aktualisiert wird, in den laden.
const mapStateToProps = state => ({
language: state.language
})
Ich habe auch versucht zu verwenden componentWillReceiveProps
und componentWillUpdate
aber es funktioniert nicht. Ich bekomme den Ausgangszustand, und sogar obwohl der Speicher und die angeschlossenen Requisiten ändern, wird die Komponente Status nicht aktualisieren.
{this.props.language} //updates
{this.state.language} //doesn't change
Was ist der richtige Weg, um Formulare verwalten von Redux Daten?
Den render
Teil:
render () {
const {classes, theme, web} = this.props
const language = (
<CardContent>
<Typography type="headline">
Language
</Typography>
<Divider/>
<form className={classes.container} autoComplete="off">
<FormControl fullWidth margin="normal">
<InputLabel htmlFor="language">Select Block</InputLabel>
<Select
value={this.state.language} //<==================== language
onChange={this.handleLanguaheChange}
input={<Input id="language"/>}
>
<MenuItem value={'en'}>English</MenuItem>
<MenuItem value={'he'}>עברית</MenuItem>
</Select>
</FormControl>
</form>
</CardContent>
)
...
return (
<Grid
container
spacing={theme.spacing.unit * 3}
justify={'space-between'}
className={classes.gridWrap}
>
<Grid item xs={6}>
<Card className={classes.card}>
{language}
</Card>
...
Ich habe versucht
componentWillMount
, componentWillUpdate
und componentWillReceiveProps
aber keiner von Ihnen arbeiteteKannst du den relevanten code Ihrer componentWillReceiveProps
es ist der exakt gleiche code wie die, die ich eingefügt mit
componentWillMount
InformationsquelleAutor ilyo | 2017-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg, Sie haben es geschrieben, der Status wird nicht aktualisiert, sofern Sie nicht explizit aktualisieren mittels
setState()
(wahrscheinlich in dercomponentWillReceiveProps()
- Methode).Wenn Sie
mapStateToProps()
mit der Reduxconnect()
- HOC, die Sie zur Abbildung Ihrer Redux Zustand der Komponente durch seine Requisiten, also in deinem Fallthis.props.language
aktualisiert wird, wenn die Redux gespeicherten updates.componentWillReceiveProps
und damit update der Staat. Bin ich falsch?Sorry, was ist der Zweck der Komponente ist
state
(aktualisiert mitthis.setState
), wennreact-redux
Karten die Redux -state
zu denprops
und nicht an der Komponentestate
? Wann verwenden wir Komponentestate
dann?Ich glaube, die Sie verwenden möchten Requisiten zum ändern des Status extern, und der Staat ändert sich der Zustand intern (in Bezug auf die Komponente).
Wie ändern etwas, das bezieht sich ausschließlich auf die Komponente und nicht die ganze Anwendung.
InformationsquelleAutor T Porter
Ersten, Sie sind mit einem Pfeil-Funktion für componentWillMount. Faustregel ist, verwenden Sie keine Pfeil-Funktionen für life-cycle-Haken(componentWillMount, shouldComponentUpdate, ...etc). Es ist üblich, setState in componentWillMount Haken. Aber nie Stand in componentDidMount.
bitte versuchen Sie es erneut es schreiben wie,
in einigen Ausnahmefällen, wie ich schrieb, zwei Klassen in einem einzigen .js-Datei(wie gesagt, einige Ausnahmen) und ich konnte nicht in der Lage sein, um es zu ändern aus componentWillMount wie erwartet(später festgestellt, die Requisiten sind, geändert durch die Kind-Klasse).
in solchen Fällen können Sie überschreiben es im render -
InformationsquelleAutor user3065781
componentWillReceiveProps
wird nur aufgerufen werden, wenn die Komponente neu gerendert.Zunächst als erste Komponente die Zeit der Montage, der es nicht ausgelöst.
Kann man das nicht nennen
setState
innencomponentwillupdate
.Damit zur Initialisierung der Anfangszustand der Komponente von redux speichern,sollten Sie
constructor
.constructor
undcomponentwillMount/reciveProps
in diesem Fall?finden Sie hier reactjs.org/docs/react-component.html
Ich habe versucht, Ihre Lösung, aber das Ergebnis ist das gleiche
Bitte teilen Sie Ihre render-Teil, wo Sie es verwenden
Ich aktualisierte die Frage mit dem Rendern
InformationsquelleAutor RIYAJ KHAN
Nicht sicher, ob das gilt, aber ich lief in ein ähnliches problem vor kurzem, und mein Fall wurde aufgrund der Tatsache, dass der Aufruf dieser.setState ist keine Garantie für eine sofortige update zum Staat; es sagt nur, daß der Zustandswechsel erfolgt schließlich.
Vom reagieren-Komponenten-Dokumentation:
Wenn Sie brauchen, um einige "instant" änderungen der staatlichen oder Dinge, die davon abhängen, Staat, dann der Rückruf auf setState (), die Sie verwenden können, zu sperren, die Dinge an Ort und Stelle. Der Rückruf ist was für mich gearbeitet.
InformationsquelleAutor JESii