Whenever I try to set the state of "activeSubStage" in the same function as setUserData (A state from the Signup component) it refuses to actually update, the useEffect DOES get trigged but the actual value never changes. If the setUserData part of the handleSaveData function the activeSubStage does actually update correctly.
Just an FYI this code has been shortened to remove unrelated parts.
export default function Signup() {
const [userData, setUserData] = useState([]);
function PersonalDetailsStage() {
const [activeSubStage, setActiveSubStage] = useState(0);
function ContactSubStage() {
const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
const [address, setAddress] = useState('');
const [address2, setAddress2] = useState('');
const [suburb, setSuburb] = useState('');
const [postCode, setPostCode] = useState('');
const [state, setState] = useState < any > '';
const [mobile, setMobile] = useState('');
useEffect(() => {
console.log('Active Sub Stage: ' + activeSubStage);
}, [activeSubStage]);
const handleSaveData = () => {
setActiveSubStage(activeSubStage + 1);
setUserData([
...userData,
{
contactDetails: {
firstName: firstName,
lastName: lastName,
address: address,
addressLine2: address2,
suburb: suburb,
postCode: postCode,
state: state,
mobile: mobile,
},
},
]);
};
return (
<form>
<Stack spacing={2}>
<TextField
value={firstName}
onChange={(e) => setFirstName(e.target.value)}
label="First name"
required
/>
/*^ Repeated For Each Input ^*/
<Box sx={{ mb: 2 }}>
<div>
<Button
variant="contained"
onClick={handleSaveData}
type="button"
sx={{ mt: 1, mr: 1 }}
disabled={
!firstName || !lastName || !address || !suburb || !postCode || !state || !mobile
}
>
Continue
</Button>
</div>
</Box>
</Stack>
</form>
);
}
}
}