我想创建订阅表单页面,我使用next js
,react-query
,typescript
。我无法在typescript
中配置我的API请求。
我的表单组件
'use client';
import React, { FormEvent, useState } from 'react';
import { useEmailSubscription } from 'src/api/email-subscription/mutations';
const SubscribeForm = () => {
const [email, setEmail] = useState('');
const { mutate } = useEmailSubscription();
const _onSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
mutate(email);
};
return (
<form onSubmit={_onSubmit}>
<div className="form-group">
<label id="email">Stay tuned for an awesome experience!</label>
<input
type="email"
id="email"
onChange={(e) => setEmail(e.target.value)}
placeholder="[email protected]"
/>
</div>
<button type="submit">Subscribe</button>
</form>
);
};
export default SubscribeForm;
字符串
我的第一个错误
mutate(email) // Argument of type 'string' is not assignable to parameter of type 'void'
型
我的要求
export const useEmailSubscription = () => {
return useMutation((email: string) => axiosOpen.post('/email-subscriptions', { email }));
};
型
我的第二个错误
Type (email: string)=> Promise <AxiosResponse <any, any>> has no properties in common with type 'UseMutationOptions<unknown, Error, void, unknown'
型
我不知道该怎么补救?
2条答案
按热度按时间m528fe3b1#
第一个错误:
mutate(email)
您的
mutate
函数需要一个void
类型的参数,但您传递的是一个字符串(email
)。这种差异可能是由于您如何定义您的突变。在您的useEmailSubscription
钩子中,您需要正确输入突变函数。第二个错误:类型与
useMutation
不匹配您需要确保在useMutation中指定的类型与您传递的函数一致。
像这样修改你的mutation hook:
字符串
表单组件应该像现在这样工作,mutate函数正确地接受一个字符串参数
332nm8kg2#
这个错误说你正在传递一个函数,其中应该有
MutationOptions
。我假设你正在使用React Query的v5,其中唯一可用的语法是将选项对象传递给useQuery
和useMutation
。所以你需要:字符串
调用
mutate(email)
是正确的,错误应该在那之后消失。