Setting the file. One moment.
Subchapter 4.20
references/migrations/minikit-to-farcaster/examples.mdMarkdown3 KBView on GitHub
Before:
import { useClose, useOpenUrl, useViewProfile } from '@coinbase/onchainkit/minikit';
function Actions({ fid }) {
const close = useClose();
const viewProfile = useViewProfile();
return (
<>
<button onClick={() => viewProfile(fid)}>Profile</button>
<button onClick={close}>Close</button>
</>
);
}After:
import { sdk } from '@farcaster/miniapp-sdk';
function Actions({ fid }) {
return (
<>
<button onClick={() => sdk.actions.viewProfile({ fid })}>Profile</button>
<button onClick={() => sdk.actions.close()}>Close</button>
</>
);
}Before:
const { context } = useMiniKit();
const { fid, username } = context?.user ?? {};After:
const [user, setUser] = useState(null);
useEffect(() => {
const load = async () => {
const ctx = await sdk.context;
setUser(ctx?.user);
};
load();
}, []);
const { fid, username } = user ?? {};Or use FrameProvider (see PROVIDER.md (opens in a new tab)):
import { useFrameContext } from '@/components/providers/FrameProvider';
const frameContext = useFrameContext();
const { fid, username } = frameContext?.context?.user ?? {};Before:
const { setFrameReady, context, isSDKLoaded } = useMiniKit();
useEffect(() => {
if (isSDKLoaded) setFrameReady();
}, [isSDKLoaded]);After:
const [ready, setReady] = useState(false);
const [context, setContext] = useState(null);
useEffect(() => {
const init = async () => {
const inMiniApp = await sdk.isInMiniApp();
if (inMiniApp) {
const ctx = await sdk.context;
setContext(ctx);
await sdk.actions.ready();
}
setReady(true);
};
init();
}, []);Before:
usePrimaryButton(
{ text: `Clicked ${count}`, disabled: false },
() => setCount(c => c + 1)
);After (no callback support):
useEffect(() => {
const setup = async () => {
await sdk.actions.setPrimaryButton({
text: "Action",
disabled: false,
hidden: false,
loading: false
});
};
setup();
}, []);
// Use regular React buttons for click handlingBefore:
const { signIn } = useAuthenticate();
const result = await signIn({ nonce });
if (result === false) { /* failed */ }After (Quick Auth):
const { token } = await sdk.quickAuth.getToken();
await fetch('/api/auth', {
headers: { Authorization: `Bearer ${token}` }
});Or use authenticated fetch:
const res = await sdk.quickAuth.fetch('/api/auth');Before:
const { context } = useMiniKit();
const insets = context?.client?.safeAreaInsets;After:
const [insets, setInsets] = useState(null);
useEffect(() => {
const load = async () => {
const ctx = await sdk.context;
setInsets(ctx?.client?.safeAreaInsets);
};
load();
}, []);Before:
const addFrame = useAddFrame();
const result = await addFrame();After:
const result = await sdk.actions.addMiniApp();
if (result) {
saveTokenToServer(result.url, result.token);
}