Package Exports
- @stytch/react
- @stytch/react/dist/index.esm.js
- @stytch/react/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@stytch/react) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@stytch/react
Stytch's React Library
Install
With npm
:
npm install @stytch/react @stytch/vanilla-js --save
Documentation
For full documentation please refer to Stytch's javascript SDK documentation at https://stytch.com/docs/sdks.
Example Usage
import { StytchProvider } from '@stytch/react';
import { createStytchUIClient } from '@stytch/react/ui';
const stytch = createStytchUIClient('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>
);
};
Typescript Support
There are built in typescript definitions in the npm package.
Migrating from @stytch/stytch-react
If you are migrating from @stytch/stytch-react, follow the steps below:
Step 1: Install the new libraries
- 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
Step 2: Remove the old SDK
- 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
Step 3: Initialize the client in your Application Root
- 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
createStytchHeadlessClient
from@stytch/react/headless
- To create the Stytch UI client, use
createStytchUIClient
from@stytch/react/ui
- Pass it into
<StytchProvider />
component from@stytch/react
import React from 'react';
import { StytchProvider } from '@stytch/react';
import { createStytchHeadlessClient } from '@stytch/react/headless';
// Or alternately
// import { createStytchUIClient } from '@stytch/react/ui';
const stytch = createStytchHeadlessClient(process.env.REACT_APP_STYTCH_PUBLIC_TOKEN);
function WrappedApp() {
return (
<StytchProvider stytch={stytch}>
<App />
</StytchProvider>
);
}
export default WrappedApp;
Step 4: Update calls to useStytchUser
, useStytchSession
, and useStytchLazy
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>
);
}
Step 5: UI Naming Changes
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