I'm using useReducer and context to update my state in App.js then sent data to the database but it doesn't Post a new updated state, and always send non-updated state.
App.js
import AuthContext from './context';
import screenA from './screenA';
export default function App() {
const initialLoginState = {
email: null,
};
const loginReducer = (prevState, action) => {
switch (action.type) {
case 'Email':
return {
...prevState,
email: action.Email,
};
}
};
const authContext = React.useMemo(
() => ({
email: emailUser => {
dispatch({type: 'Email', Email: emailUser});
},
signIn: async () => {
try {
fetch('FakeApi', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: loginState.email,
date: '2021-9-20',
}),
});
} catch (e) {
console.log(e);
}
},
}),
[],
);
const [loginState, dispatch] = React.useReducer(
loginReducer,
initialLoginState,
);
return (
<AuthContext.Provider value={authContext}>
<screenA />
</AuthContext.Provider>
Blockquote context
I create a separate context component
context.js
import React from 'react';
export const AuthContext = React.createContext();
Blockquote screenA
In screenA I use email and signIn to send data to App.js and then save this data in the database
screenA.js
import {AuthContext} from './context';
function screenA() {
const {email,signIn} = React.useContext(AuthContext);
return (
<View style={{marginTop: 150}}>
{/* Count: {state.count} */}
<Button
title="sent email"
onPress={() => {
email('example@gmail.com');
}}
/>
<Button
title="signIn"
onPress={() => {
signIn();
}}
/>
</View>
);
}
export default screenA;