useQuery

useQuery

const { loading, data, error, refetch } = useQuery(query, variables, options)

获取服务端数据是一个非常通用的业务场景,这个一个重复而繁杂的工作,useQuery 把这个业务逻辑通用化了,通过 useQuery,你可以用最简单的方式获取数据,并且可以方便的处理加载状态和错误信息。

Params

query: string

GraphQL 的 query 字符串,例如:

{
  hero {
    name
  }
}

variables?: {[key: string]: any}

GraphQL 查询的变量,是一个普通的 JavaScript 对象,例如:

{
  id: 1000
}

options?:TODO:

其他参数,是一个普通的 JavaScript 对象,例如:

{
  headers: {
    token: '57bb44dd21d2befb7ca3f010'
  }
}

Result

loading: boolean

请求状态,是否成功获取数据,对前端界面状态处理很有用。

data: TData

GraphQL 查询成功返回的数据对象,例如:

{
  hero: {
    name: 'Cristiano Ronaldo'
  }
}

error: TError

请求发生错误时,返回的错误信息对象,例如:

{
  error: {
    statusCode: 401,
    error: "Unauthorized",
    message: "未登录"
  }
}

refetch: (variables?: TVariables) => void

一个函数,可以让你重新发请求获取数据,比如你有一刷新按钮,点击重新获取数据,你就可以用 refetch 了。

使用 React hooks 的方式获取 state,为了获得更好的性能,尽量减少 re-render,需要使用 state selector,例如:S => S.countS => S。使用 React hooks,你不要写任何 TypeScript type 就可以得到完整的智能提示。

const App = () => {
  const { useStore } = counterStore
  const count = useStore(S => S.count)
  return <span>{count}</span>
}

store.dispatch

Dispatch 一个 action 用来更新 state,dispatch 接受一个 action selector(类似 state selector),而不是 Redux 使用的字符串标量,这样的好处是:智能提示、精确的跳转到定义,可以有更好的开发体验和代码可维护性。

const App = () => {
  const { dispatch } = counterStore
  return <button onClick={() => dispatch(A => A.decrement)}>-</button>
}

store.query

TODO:

store.fetch

TODO:

Last updated

Was this helpful?