2017-02-15 5 views
6

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> 
    ) 
    } 
} 

Odpowiedz

18

componentWillReceiveProps otrzymuje nextProps jako argument. z kodem, który obecnie właśnie ustawiasz użytkownika z powrotem do jego obecnego stanu. Musisz podać podany argument nextProps.

export class UserInfoComponent extends Component { 
    constructor(props){ 
    super(props); 
    this.state = {user: this.props.user} 
    } 

    componentWillReceiveProps(nextProps){ 
    this.setState({user: nextProps.user}) 
    } 

    render() { 
    if(this.state.user) 
    return (
     <h1>{this.state.user.firstName}</h1> 
    ); 

    return (
     <h1>loading</h1> 
    ) 
    } 
} 
+0

Dlaczego warto używać stanu? Zmiana rekwizytów spowoduje już ponowne renderowanie komponentu. – FurkanO

+0

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

+0

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