Stytch's React Library
With npm
:
npm install @stytch/react @stytch/vanilla-js --save
For full documentation please refer to Stytch's javascript SDK documentation at https://stytch.com/docs/sdks.
import { StytchProvider } from '@stytch/react';
import { StytchUIClient } from '@stytch/vanilla-js';
const stytch = new StytchUIClient('public-token-<find yours in the stytch dashboard>');
// Wrap your App in the StytchProvider
const Root = () => (
<StytchProvider stytch={stytch}>
<App />
</StytchProvider>
);
// Now use Stytch in your components
const App = () => {
const stytchProps = {
config: {
products: ['emailMagicLinks'],
emailMagicLinksOptions: {
loginRedirectURL: 'https://example.com/authenticate',
loginExpirationMinutes: 30,
signupRedirectURL: 'https://example.com/authenticate',
signupExpirationMinutes: 30,
createUserAsPending: true,
},
},
styles: {
container: { width: '321px' },
colors: { primary: '#0577CA' },
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
},
callbacks: {
onEvent: (message) => console.log(message),
onError: (message) => console.log(message),
},
};
return (
<div id="login">
<StytchLogin config={stytchProps.config} styles={stytchProps.styles} callbacks={stytchProps.callbacks} />
</div>
);
};
There are built in typescript definitions in the npm package.
If you are migrating from @stytch/stytch-react, follow the steps below:
- The core SDK is now bundled in its own module - @stytch/vanilla-js
- We now have a library specifically for React bindings - @stytch/react
# NPM
npm install @stytch/vanilla-js @stytch/react
# Yarn
yarn add @stytch/vanilla-js @stytch/react
- Remove the
@styth/stytch-react
package - If you are explicitly loading the
stytch.js
script in the document header, remove it. It isn't needed anymore.
# NPM
npm rm @stytch/stytch-react
# Yarn
yarn remove @stytch/stytch-react
- Determine if you need the Headless or UI client. If you plan to use the
<StytchLogin />
component in your application then you should use the the UI client. Otherwise use the Headless client to minimize application bundle size. - To create the Stytch Headless client, use
StytchHeadlessClient
from@stytch/vanilla-js/headless
- To create the Stytch UI client, use
StytchUIClient
from@stytch/vanilla-js
- Pass it into
<StytchProvider />
component from@stytch/react
import React from 'react';
import { StytchProvider } from '@stytch/react';
import { StytchHeadlessClient } from '@stytch/vanilla-js/headless';
// Or alternately
// import { StytchUIClient } from '@stytch/vanilla-js';
const stytch = new StytchHeadlessClient(process.env.REACT_APP_STYTCH_PUBLIC_TOKEN);
function WrappedApp() {
return (
<StytchProvider stytch={stytch}>
<App />
</StytchProvider>
);
}
export default WrappedApp;
-
useStytchUser
anduseStytchSession
hooks now return envelope objects -{ user, isCached }
and{ session, isCached }
respectively.- On first render the SDK will read user/session out of persistent storage, and serve them with
isCached: true
- at this point you’re reading the stale-while-revalidating value - The SDK will make network requests to pull the most up-to-date user and session objects, and serve them with
isCached: false
- On first render the SDK will read user/session out of persistent storage, and serve them with
-
useStytchLazy
is no longer required - you may always calluseStytch
now
import React, { useEffect } from 'react';
import { useStytchUser } from '@stytch/react';
export default function Profile() {
const router = useRouter();
const { user, isCached } = useStytchUser();
return (
<Layout>
<h1>Your {isCached ? 'Cached' : null} Profile</h1>
<pre>{JSON.stringify(user, null, 2)}</pre>
</Layout>
);
}
We've made a number of small changes to our naming conventions to make the API cleaner and easier to understand.
- The
<Stytch />
login component is now called<StytchLogin />
- The
OAuthProvidersTypes
enum is now calledOAuthProviders
- The
SDKProductTypes
enum is now calledProducts
- There are some additional changes to the
styles
config documented here