2017-02-15 19 views
6

Tôi không thể tìm ra cách làm cho componenet của tôi tái xuất hiện khi giá trị của this.props.user thay đổi. Ban đầu giá trị của this.props.user là null nhưng nó thay đổi thành giá trị thực sau vài giây. Dưới đây tôi đang hiển thị thành phần con. Thành phần cha mẹ ánh xạ trạng thái cửa hàng đến các đạo cụ của nó và tôi chuyển nó tới lớp thành phần con bên dưới.React use componentWillReceiveProps để tái render thành phần

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

Trả lời

18

componentWillReceiveProps nhận được nextProps làm đối số. với mã bạn hiện đang có bạn chỉ cần thiết lập người dùng trở lại trạng thái hiện tại của nó. Bạn cần sử dụng đối số nextProps được cung cấp.

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

Tại sao nên sử dụng trạng thái? Thay đổi đạo cụ sẽ dẫn đến việc kết xuất lại thành phần. – FurkanO

+0

Sự khác biệt chính ở đây là trong ví dụ câu hỏi họ đang chuyển đổi của họ thông qua trong đạo cụ để trạng thái nội bộ của riêng mình. Điều này chỉ xảy ra một lần khi thành phần được hiển thị ở bất kỳ đâu mà 'this.state.user' i được tham chiếu sẽ luôn tham chiếu giá trị đầu tiên đã từng được truyền vào vì nó xảy ra trong quá trình xây dựng thành phần. 'componentWillReceiveProps' cập nhật trạng thái khi thành phần cha đã truyền vào các đạo cụ mới nhưng điều này không xảy ra một cách tự nhiên và tại sao chuyển đổi đạo cụ thành trạng thái thường là một mẫu chống – finalfreq

+0

. để trở lại thành phần. Người hỏi có thể không biết điều đó. Tôi không hỏi về sự khác biệt. – FurkanO

Các vấn đề liên quan