2017-08-26 72 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

相关问题