【发布时间】:2018-10-14 09:22:07
【问题描述】:
我有这个项目,有点像 Facebook。这个想法是,当用户在他们的个人资料页面中时,他们应该看到他们朋友的用户名列表。单击每个用户名后,应用程序会从 url 中获取该人的 id,然后向服务器发送一个 graphql 查询,以获取该人的所有相关详细信息。 下面是当用户点击任何朋友的用户名时调用的方法。这按预期工作:
onClickFriend(e) {
e.preventDefault()
this.props.history.push(`/friends/${ e.target.id}`)
}
然后在处理用户访问的url的组件(即显示好友资料的组件)中包含如下代码:
import React from 'react'
import PostsColumn from "./posts/PostsColumn"
import NewPostForm from "./posts/NewPostForm"
import {fetchFriendProfile} from "../queries/queries"
import {graphql} from 'react-apollo'
import {withRouter } from 'react-router'
const FriendProfile=({data})=>{
const {loading, error, fetchFriendProfile} = data
if (loading) return <p>Loading...</p>
if (error) return <p>{error}(</p>
const {username, birthday, profile_picture} = fetchFriendProfile
return (
<div className="row">
<div className="col-sm-3">
<br/>
<img src={`/uploads/${profile_picture}`} alt="Profile picture" width="200" height="200"/>
<ul>
<li>{username}</li>
<li>{new Date(birthday).toDateString()}</li>
</ul>
</div>
<div className="col-sm-6">
<br/>
<br/>
<div className="content-feed">
<NewPostForm/>
</div>
{/*<PostsColumn />*/}
</div>
</div>
)
}
export default graphql(fetchFriendProfile)(withRouter(FriendProfile))
而graphql查询是:
import {gql} from 'apollo-boost'
const fetchPalPosts = gql`
{
fetchFriendPosts(id:"${window.location.pathname.split('/')[2]}") {
username
birthday
profile_picture
}
}
`
export { fetchFriendProfile}
当网站加载时,我会看到我所有朋友的用户名列表,第一次点击任何用户,我都会得到所有相关的详细信息。但是,当我返回并单击另一个用户时,此配置文件组件会为我提供我单击的第一个用户的配置文件详细信息。 url 正在更改以反映这个新点击人员的 id,但该组件未显示正确的详细信息。只有当我重新加载页面时,我才能获得正确的详细信息。进行一些调试后,我意识到从第二次开始单击这些用户名中的任何一个时,甚至都没有对服务器进行查询。只有当我重新加载页面时才会进行查询。我需要帮助才能知道 每次在 react-apollo 和 graphql 中调用组件时如何向服务器重新发送查询。 (我是graphql的初学者)
【问题讨论】:
标签: javascript reactjs graphql react-apollo