2017-08-26 108 views
2

我創建一個頁面,在這裏你可以看到人民的配置文件及其所有項目,其中有pathname="https://stackoverflow.com/users/{their id}"以及它可以帶你到你的個人資料菜單數據。但我的問題是,當你去一個人的個人資料頁,然後到另一個時,路徑變化,但數據不會呈現它只會改變路徑和數據保持不變。爲了呈現數據,您必須刷新頁面,然後顯示新用戶數據。我將如何得到它,所以你就不必刷新頁面,所以像他們點擊自己想去的路徑更改的用戶,並沒有呈現在頁面的新數據刷新?此外,有事時,你刷新頁面時的用戶配置文件,它應該返回用戶的電子郵件地址,它當您第一次訪問該頁面,但是當你刷新頁面,它返回一個錯誤,說它能」找到電子郵件。陣營 - 路線有相同的路徑,但不同的參數改變更新

下面是菜單部分(鏈接到我的個人資料),代碼:

import { Meteor } from "meteor/meteor" 
import React from "react"; 
import { withRouter, Link } from "react-router-dom"; 

import { SubjectRoutes } from "./subjectRoutes/subjectRoutes"; 
import AddNote from "./AddNote"; 

class Menu extends React.Component{ 
    render(){ 
    return(
     <div> 
     <div className="scroll"></div> 
     <div className="menu"> 
      <h1>Menu</h1> 
      <p><Link to="/">Home</Link></p> 
      <Link to="/searchNotes">Notes</Link> 
      <p><Link to="/addNote">Add a Note</Link></p> 
      <p><Link to={`/users/${Meteor.userId()}`} >My Profile</Link></p> 
     </div> 
     </div> 
    ) 
    } 
} 
export default withRouter(Menu) 

userProfile.js:

import { Meteor } from "meteor/meteor"; 
import React from "react"; 
import { withRouter } from "react-router-dom"; 
import { Tracker } from "meteor/tracker"; 

import Menu from "./Menu"; 
import RenderNotesByUserId from "./renderNotesByUserId" 

class userProfile extends React.Component{ 
    constructor(props){ 
    super(props); 
    this.state = { 
     email: "" 
    }; 
    } 
    logoutUser(e){ 
    e.preventDefault() 
    Accounts.logout(() => { 
     this.props.history.push("/login"); 
    }); 
    } 
    componentWillMount() { 
    Meteor.subscribe('user'); 
    Meteor.subscribe('users'); 
    this.tracker = Tracker.autorun(() => { 
     const user = Meteor.users.findOne(this.props.match.params.userId) 
     this.setState({email: user.emails[0].address}) 
    }); 
    } 
    render(){ 
    return(
     <div> 
     <Menu /> 
     <button onClick={this.logoutUser.bind(this)}>Logout</button> 
     <h1>{this.state.email}</h1> 
     <RenderNotesByUserId filter={this.props.match.params.userId}/> 
     </div> 
    ) 
    } 
} 
export default withRouter(userProfile); 

對不起,使這個問題這麼久,它只是一個很奇怪的問題我有我似乎無法找到任何網上答案。

回答

1

ComponentWillMount()只運行一次,您的組件之前被渲染。您還需要使用ComponentWillReceiveProps()才能在道具更改時更新狀態。

退房React Component Lifecycle

+0

將在解決這兩個問題? –

+0

這解決了我的問題! – Ansjovis86

相關問題