在 React 自定义 Hook 中没有 Hook 的 Apollo mutate
Apollo mutate without Hook in React custom Hook
我正在 React 组件中调用自定义挂钩:
const [CallMe, { loading, data, error }] = useCustomHook({
onCompleted(res) {
console.log(res)
},
onError(err) {
console.log(err)
},
})
通过 onClick 事件启动:
onClick={() => CallMe() }
自定义挂钩包含以下内容:
export function useCustomHook({ onCompleted, onError }) {
/**
* Use State
*/
const [loading, setLoading] = useState(false)
const [data, setData] = useState(null)
const [error, setError] = useState(null)
/**
* Get Thing
*/
function GetThing() {
setLoading(true)
callExternalApi
.method()
.then(({ data, error }) => {
setLoading(false)
if (error) {
setError(error)
onError(error)
}
if (data) {
CALL TO MUTATION NEEDED HERE (NON HOOK)
}
})
}
return [GetThing, { loading: loading, data: data, error: error }]
}
成功返回数据后,我想触发 Mutation,但我不希望通过 useMutation Apollo 挂钩完成此操作。
因此我的问题是如何以 none 挂钩方式触发此突变,这仍然允许我在这个自定义挂钩中更新 Apollo 缓存响应?
我知道我可以通过 Fetch 简单地执行 HTTP 请求,但这不会给我在整个应用程序中使用的 inMemoryCache 优势。我必须在自定义挂钩中初始化 Apollo 吗?
欢迎提出任何想法或建议。
似乎在我的自定义挂钩中我可以导入 Apollo 客户端,这让我能够使用突变和查询。
import { useApolloClient } from '@apollo/client'
然后在您导出的自定义挂钩中:
client
.mutate({
mutation:MUTATION,
variables: {
Input: input,
},
})
.catch((error) => {
console.log(error)
})
.then((result) => {
console.log(result)})
我正在 React 组件中调用自定义挂钩:
const [CallMe, { loading, data, error }] = useCustomHook({
onCompleted(res) {
console.log(res)
},
onError(err) {
console.log(err)
},
})
通过 onClick 事件启动:
onClick={() => CallMe() }
自定义挂钩包含以下内容:
export function useCustomHook({ onCompleted, onError }) {
/**
* Use State
*/
const [loading, setLoading] = useState(false)
const [data, setData] = useState(null)
const [error, setError] = useState(null)
/**
* Get Thing
*/
function GetThing() {
setLoading(true)
callExternalApi
.method()
.then(({ data, error }) => {
setLoading(false)
if (error) {
setError(error)
onError(error)
}
if (data) {
CALL TO MUTATION NEEDED HERE (NON HOOK)
}
})
}
return [GetThing, { loading: loading, data: data, error: error }]
}
成功返回数据后,我想触发 Mutation,但我不希望通过 useMutation Apollo 挂钩完成此操作。
因此我的问题是如何以 none 挂钩方式触发此突变,这仍然允许我在这个自定义挂钩中更新 Apollo 缓存响应?
我知道我可以通过 Fetch 简单地执行 HTTP 请求,但这不会给我在整个应用程序中使用的 inMemoryCache 优势。我必须在自定义挂钩中初始化 Apollo 吗?
欢迎提出任何想法或建议。
似乎在我的自定义挂钩中我可以导入 Apollo 客户端,这让我能够使用突变和查询。
import { useApolloClient } from '@apollo/client'
然后在您导出的自定义挂钩中:
client
.mutate({
mutation:MUTATION,
variables: {
Input: input,
},
})
.catch((error) => {
console.log(error)
})
.then((result) => {
console.log(result)})