【发布时间】:2020-07-24 05:23:44
【问题描述】:
我正在使用以下数据类型运行 graphql 查询:
mutation AddVehicle(
$freeSeats: Number!
$numberPlate: String!
$userId: Number!
)
在我的前端,我使用材料 ui 文本字段,默认情况下将输入作为字符串。要将其更改为整数,我在将参数传递给submitForm函数时使用了Number(freeSeats)etc。
但是,当我提交表单时,我仍然收到这些错误,这意味着这些值仍然作为字符串传递。我该如何解决这个问题?
The specified value type of field `freeSeats` does not match the field type.
GraphQL error: The specified value type of field `userId` does not match the field type.
我也在submitForm函数的开头尝试了console.log(isNumber(freeSeats)。它打印真实。所以我知道字符串被转换为整数,但没有在突变中正确传递。
export default function AddVehiclePage() {
const [isSubmitted, setIsSubmitted] = useState(false);
const [isAdded, setIsAdded] = useState(false);
const [errorMessage, setErrorMessage] = useState('');
const [addVehicle] = useMutation(ADD_VEHICLE);
const formik = useFormik({
initialValues:{
freeSeats: '',
numberPlate: '',
userId: '',
},
onSubmit:(values, actions) => {
submitForm(Number(formik.values.freeSeats),formik.values.numberPlate,Number(formik.values.userId));
validationSchema:schema
})
let submitForm = (
freeSeats: Number,
numberPlate: string,
userId: Number,
) => {
setIsSubmitted(true);
addVehicle({
variables: {
freeSeats: freeSeats,
numberPlate: numberPlate,
userId: userId,
},
})
.then(({ data }: ExecutionResult<CreateVehicleResponse>) => {
if (data !== null && data !== undefined) {
setIsAdded(true);
}
})
.catch((error: { message: string }) => {
console.log('Error msg:' + error.message);
});
};
return (
<div>
<Form
onSubmit={e => {
e.preventDefault();
formik.handleSubmit();
}}>
<div>
<TextField
variant="outlined"
margin="normal"
id="freeSeats"
name="freeSeats"
helperText={formik.touched.freeSeats ? formik.errors.freeSeats : ''}
error={formik.touched.freeSeats && Boolean(formik.errors.freeSeats)}
label="Free Seats"
value={formik.values.freeSeats}
onChange={props => {
formik.handleChange(props);
formik.handleBlur(props);
}}
onBlur={formik.handleBlur}
/>
<br></br>
<TextField
variant="outlined"
margin="normal"
id="numberPlate"
name="numberPlate"
helperText={formik.touched.numberPlate ? formik.errors.numberPlate : ''}
error={formik.touched.numberPlate && Boolean(formik.errors.numberPlate)}
label="Number Plate"
value={formik.values.numberPlate}
onChange={props => {
formik.handleChange(props);
formik.handleBlur(props);
}}
onBlur={formik.handleBlur}
/>
<br></br>
<TextField
variant="outlined"
margin="normal"
id="userId"
name="userId"
helperText={formik.touched.userId ? formik.errors.userId: ''}
error={formik.touched.userId && Boolean(formik.errors.userId)}
label="User Id"
value={formik.values.userId}
onChange={props => {
formik.handleChange(props);
formik.handleBlur(props);
}}
onBlur={formik.handleBlur}
/>
<br></br>
<CustomButton
text={'Add'}
/>
</div>
</Form>
</div>
);
}
【问题讨论】:
-
我做了一个沙盒。最后提到了userId @xadm codesandbox.io/s/unruffled-browser-qjof4?file=/src/App.tsx
标签: javascript reactjs typescript graphql formik