为什么data
在Promise中没有定义,即使它出现在下面的html中?
我不想使用.then((data) =>
const LoginPage: React.SFC<{}> = () => {
const [login, { loading, data, error }] = useMutation<Q, V>(MUTATION)
const onSubmit = event => {
event.preventDefault()
login({
variables: {
email,
password
}
}).then(() => {
console.log(data) // <-- undefined
}).catch(() => {
console.log(error) // <-- OK
})
}
return <div>
<form onSubmit={onSubmit}> ... </form>
{data && <pre>{JSON.stringify(data)}</pre>} // <-- OK
</div>
}
答案 0 :(得分:1)
原始问题的变体。由于突变的Promise的结果是不确定的,因此不确定它是否按预期工作。谢谢。
const [login] = useMutation(MUTATION);
const onSubmit = event => {
event.preventDefault()
login({
variables: {
email,
password
}
}).then((result) => {
console.log(result) // <-- undefined
}).catch(() => {
console.log(error) // <-- OK
})
}
答案 1 :(得分:0)
这按预期工作。调用useState
钩子is asynchronous返回的状态更新器函数引起的状态更新。 useState
在后台使用useMutation
来管理钩子返回的各种状态位(data
,loading
,error
等),因此此状态也会异步更新。这意味着login
返回的Promise可以解决,并且这样做可以更新适当的状态,而不会立即更新。更新后,该组件将重新呈现,您将在组件中看到更新后的值。
如果您需要在Promise解析后立即以某种方式利用突变返回的数据,则需要通过从Promise的解析值中提取出来而不是依赖于组件状态来实现。