iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0

介紹

來介紹ApolloData 基本的查詢,使用ApolloData Client 的話直接都用原生GraphQL的查詢語法即可不需要學其他的語法,前幾篇也有提到 graphql Hoc 查詢回來的資料會放到 props.data,但除了資料外 ApolloData 會多幾個 method ,接下來介紹 Query後會在props的 method

data:{ 
  user:{ name:“James” },
  like:{ count:10 },
  loading:false,
  error:null,
  variables:{ id:'asdf' },
  refetch(){...},
  fetchMore(){...},
  startPolling(){...},
  stopPolling(){...},// ...更多方法 }

在上方可以看到 user like 這些都是發出fetch後得到的資料,但像其他的loading,error,variables...等等 就是ApolloData提供的 query method了,以下來介紹幾個常用的

1.loading
再發request的時候ApolloData會把loading這個狀態改成 true,所以通常都會拿這裡的props.data.loading來做載入動畫,另外當true的時候表示資料尚未得到

function MyComponent({ data: { loading } }) {
  if (loading) {
    return <div>Loading...</div>;
  } else {
    // ...
  }
}

export default graphql(gql`query { ... }`)(MyComponent);

2.error
這邊如果有錯誤返回通常也會把元件狀態改成錯誤時候會呈現的樣貌

function MyComponent({ data: { error } }) {
  if (error) {
    return <div>Error!</div>;
  } else {
    // ...
  }
}

export default graphql(gql`query { ... }`)(MyComponent);

3.variables

如果使用varibales 就可以改變發payload的查詢所以如果 variables 有改寫資料有改變物件也是會重新render

function MyComponent({ data: { variables } }) {
  return (
    <div>
      Query executed with the following variables:
      <code>{JSON.stringify(variables)}</code>
    </div>
  );
}

export default graphql(gql`query { ... }`)(MyComponent);

4.refetch
強制組件重新讀取您在graphql函數中定義的查詢。重新加載組件中的數據,或在發生錯誤後重試抓取時,此方法很有用。

function MyComponent({ data: { refetch } }) {
  return (
    <button onClick={() => refetch()}>
      Reload
    </button>
  );
}

export default graphql(gql`query { ... }`)(MyComponent);

總結

在ApolloData 真正好用的就是前端Query的這些API,可以在前端撰寫上更輕鬆愉快,下一篇再繼續介紹Query Method 其他好用的API


上一篇
ApolloData & Query 與 Mutation
下一篇
ApolloData & Query method (二)
系列文
GraphQL + ApolloData 入門30

尚未有邦友留言

立即登入留言