formik - Formik 与 react-query onSubmit 一起使用抛出“无效的钩子调用”
问题描述
我有一个 React Native 表单,我正在尝试将 Formik 与 react-query 一起使用。
问题是在从我收到钩子错误useQuery()
调用的函数中使用:onSubmit
警告:从 submitForm() 捕获到未处理的错误 [错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。
我相信我理解错误是什么,但我不明白如何解决这个问题。
我拼凑的例子只是为了演示这个问题:
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { Button, StyleSheet, Text, TextInput, View } from 'react-native';
import { useQuery } from 'react-query';
import { Formik } from 'formik';
import axios from 'axios';
const getPokemonList = async () => {
const { data } = await axios.get("https://pokeapi.co/api/v2/pokemon");
return data;
};
function authenticate(username, password) {
const { isLoading, error, data } = useQuery('fetchLuke', getPokemonList);
if (data) {
{
return (
<Text>
{JSON.stringify(data, null, 2)}
</Text>
);
}
}
if (error) {
return (
<Text>{error}</Text>
);
}
if ( isLoading ) {
return (
<Text>Retrieving Luke Skywalker Information...</Text>
);
}
}
export default function App() {
return (
<View style={styles.container}>
<Formik
initialValues={{ email: '' }}
onSubmit={(values, actions) => {
authenticate(values.email);
actions.resetForm();
}}
>
{({
handleChange,
handleBlur,
handleSubmit, values }) => <View>
<TextInput
onChangeText={handleChange('email')}
onBlur={handleBlur('email')}
value={values.email}
/>
<Button onPress={handleSubmit} title="Submit" />
</View>}
</Formik>
</View>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
解决方案
这是相当简单的。
- 创建一个变量并将useQuery赋值给它(在App中,因为useQuery是一个钩子,钩子只能在功能组件中使用)
- 在您的 onSubmit 中调用变量或将其传递给身份验证...
推荐阅读
- python - Django 自定义用户模型未显示在管理页面的身份验证和授权下
- python - 谷歌云数据存储延迟
- javascript - ui-bootstrap 模态不会关闭或关闭
- cmake - 列出 CTest 测试套件中可执行文件的位置
- git - 如何访问名称中带有“:”的 git 分支?
- laravel - Laravel:显示来自公共存储的图像
- html - 如何将 ap 标签放在两个 div 下?
- android - 在 android 启动时重新启用先前未在关机前通知的警报(非重复)
- python - 元组到列表中以查找最大值以及是否存在重复
- javascript - Discord oauth API inavlid_reuqest 错误。- express.js