The screen defines tokens as wallet.state.tokens in one place, uses this value to do the calculations, but then triggers the useEffect on wallet.state.tokens.
Make sure the tokens used in the useEffect is the same tokens used in the dependency array.