Nie mogę wymyślić, jak dokonać ponownego renderowania komponentu, gdy zmieni się wartość this.props.user
. Początkowo wartość this.props.user
ma wartość null, ale zmienia się ona na wartość rzeczywistą po sekundach. Poniżej pokazuję element potomny. Komponent macierzysty mapuje stan sklepu na rekwizyty i przekazuję je do poniższej klasy komponentów podrzędnych.Użyj komponentu componentWillReceiveProps do ponownego renderowania komponentu
export class UserInfoComponent extends Component {
constructor(props){
super(props);
this.state = {user: this.props.user}
}
componentWillReceiveProps(){
this.setState({user: this.props.user})
}
render() {
if(this.state.user)
return (
<h1>{this.state.user.firstName}</h1>
);
return (
<h1>loading</h1>
)
}
}
Dlaczego warto używać stanu? Zmiana rekwizytów spowoduje już ponowne renderowanie komponentu. – FurkanO
Podstawową różnicą jest to, że w przykładzie z pytającymi przekształcają przekazane rekwizyty w swój własny stan wewnętrzny. Dzieje się tak tylko raz, gdy komponent jest renderowany w dowolnym miejscu, w którym 'this.state.user' odwołuje się zawsze do pierwszej wartości, która kiedykolwiek została przekazana, ponieważ dzieje się to podczas konstruowania komponentu. Komponent 'componentWillReceiveProps' aktualizuje stan, gdy komponent nadrzędny przekazał nowe rekwizyty, ale nie dzieje się to naturalnie i dlaczego przekształcanie rekwizytów w stan jest zwykle wzorcem zapobiegawczym. – finalfreq
Moim celem jest powiedzieć, że nie musisz słuchać zmian rekwizytów aby ponownie wydać komponent. Pytający może o tym nie wiedzieć. Nie pytałem o różnicę. – FurkanO