I want to call register function onSubmit but when i tried to console it, it shows undefined.
I also tried to use register
like this const {register} = useContext(ApiContext);
still it is undefined.
Auth.js
const AuthProvider = ({children}) => {
const [signUp, setSignUp] = useState([]);
const [formData, setFormData] = useState(FORM_FIELDS);
const authState = {
signUpData: signUp,
setSignUp: setSignUp,
setFormData: setFormData,
formData: formData,
register: handleRegister,
};
const handleRegister = async () => {
const response = await axios
.post(process.env.API_BASE_URL + API_ENDPOINTS.SIGN_UP, {
email: formData.email,
first_name: formData.firstName,
last_name: formData.lastName,
password: formData.password,
})
.then(data => console.log(data, 'apiData'));
console.log(response, 'response');
};
return (
<ApiContext.Provider value={authState}>{children}</ApiContext.Provider>
);
};
export const ApiContext = createContext(AuthProvider);
export default AuthProvider;
Register.js
export default function MultiStepSignUp() {
const auth = useAuth();
const onSubmit = () => {
console.log(auth.register, 'auth');
// here console shows undefined
};
useAuth.js
import {useContext} from 'react';
import {ApiContext} from 'src/context/ApiContext';
export const useAuth = () => useContext(ApiContext);
Here is the details and simplified answer.
This is the IntroContext.js
import React, {useState} from 'react';
const initialState = {
isLoggedIn: false,
userData: null,
setIsLoggedIn: () => {},
setUserData: () => {},
};
const IntroContext = React.createContext(initialState);
function IntroProvider({children}) {
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [userData, setUserData] = useState(null);
return (
<IntroContext.Provider
value={{
isLoggedIn,
setIsLoggedIn,
userData,
setUserData,
}}>
{children}
</IntroContext.Provider>
);
}
export {IntroContext, IntroProvider};
How to use in the App.js file
import React from 'react';
import {IntroProvider} from './src/context/IntroContext';
import App from './src/navigations/Index';
const MainApp2 = () => {
return (
<IntroProvider>
<App />
</IntroProvider>
);
};
export default MainApp2;
Here u can use this in the LoginScreen.js
import React, {useContext, useState} from 'react';
import {StyleSheet, Text, TouchableOpacity, View} from 'react-native';
import {IntroContext} from '../context/IntroContext';
const LoginScreen = () => {
const {setIsLoggedIn, setUserData} = useContext(IntroContext);
const [user_data, setuserdata] = useState({
first_name: 'Jhon',
last_name: 'Burg',
mobile_number: '+923495544123',
});
const onPressAccept = async () => {
setUserData(user_data);
setIsLoggedIn(true);
};
return (
<View style={styles.container}>
<View style={styles.btnsView}>
<TouchableOpacity style={styles.btn} onPress={() => onPressAccept()}>
<Text style={styles.btnText}>Accept</Text>
</TouchableOpacity>
</View>
</View>
);
};
const styles = StyleSheet.create({});
export default LoginScreen;
if you have any confusion please ask in the comment.