converting-minikit-to-farcaster

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

MiniKit to Farcaster SDK

将MiniKit迁移至Farcaster SDK

Breaking Changes (SDK v0.2.0+)

重大变更(SDK v0.2.0+)

  1. sdk.context
    is a Promise — must await
  2. sdk.isInMiniApp()
    accepts no parameters
  3. sdk.actions.setPrimaryButton()
    has no onClick callback
Check version:
npm list @farcaster/miniapp-sdk
  1. sdk.context
    是一个Promise——必须使用await
  2. sdk.isInMiniApp()
    不接受任何参数
  3. sdk.actions.setPrimaryButton()
    没有onClick回调
查看版本:
npm list @farcaster/miniapp-sdk

Quick Reference

快速参考

MiniKitFarcaster SDKNotes
useMiniKit().setFrameReady()
await sdk.actions.ready()
useMiniKit().context
await sdk.context
Async
useMiniKit().isSDKLoaded
await sdk.isInMiniApp()
No params
useClose()
await sdk.actions.close()
useOpenUrl(url)
await sdk.actions.openUrl(url)
useViewProfile(fid)
await sdk.actions.viewProfile({ fid })
useViewCast(hash)
await sdk.actions.viewCast({ hash })
useComposeCast()
await sdk.actions.composeCast({ text, embeds })
useAddFrame()
await sdk.actions.addMiniApp()
usePrimaryButton(opts, cb)
await sdk.actions.setPrimaryButton(opts)
No callback
useAuthenticate()
sdk.quickAuth.getToken()
See AUTH.md
MiniKitFarcaster SDK说明
useMiniKit().setFrameReady()
await sdk.actions.ready()
useMiniKit().context
await sdk.context
异步
useMiniKit().isSDKLoaded
await sdk.isInMiniApp()
无参数
useClose()
await sdk.actions.close()
useOpenUrl(url)
await sdk.actions.openUrl(url)
useViewProfile(fid)
await sdk.actions.viewProfile({ fid })
useViewCast(hash)
await sdk.actions.viewCast({ hash })
useComposeCast()
await sdk.actions.composeCast({ text, embeds })
useAddFrame()
await sdk.actions.addMiniApp()
usePrimaryButton(opts, cb)
await sdk.actions.setPrimaryButton(opts)
无回调
useAuthenticate()
sdk.quickAuth.getToken()
查看 AUTH.md

Context Access Pattern

上下文访问模式

typescript
// WRONG
const fid = sdk.context?.user?.fid;

// CORRECT
const context = await sdk.context;
const fid = context?.user?.fid;
In React components, use state:
typescript
const [context, setContext] = useState(null);

useEffect(() => {
  const load = async () => {
    const ctx = await sdk.context;
    setContext(ctx);
  };
  load();
}, []);
typescript
// 错误写法
const fid = sdk.context?.user?.fid;

// 正确写法
const context = await sdk.context;
const fid = context?.user?.fid;
在React组件中,使用状态:
typescript
const [context, setContext] = useState(null);

useEffect(() => {
  const load = async () => {
    const ctx = await sdk.context;
    setContext(ctx);
  };
  load();
}, []);

Conversion Workflow

转换流程

  1. Verify Node.js >= 22.11.0
  2. Update dependencies — see DEPENDENCIES.md
  3. Replace imports:
    @coinbase/onchainkit/minikit
    @farcaster/miniapp-sdk
  4. Convert hooks using reference above
  5. Add FrameProvider — see PROVIDER.md
  6. Update manifest:
    frame
    miniapp
    — see MANIFEST.md
  1. 验证Node.js版本 >= 22.11.0
  2. 更新依赖——查看 DEPENDENCIES.md
  3. 替换导入:
    @coinbase/onchainkit/minikit
    @farcaster/miniapp-sdk
  4. 参考上方内容转换钩子
  5. 添加FrameProvider——查看 PROVIDER.md
  6. 更新清单:
    frame
    miniapp
    ——查看 MANIFEST.md

Common Errors

常见错误

"Property 'user' does not exist on type 'Promise<MiniAppContext>'" → Await
sdk.context
before accessing properties
"Expected 0 arguments, but got 1" → Remove parameters from
sdk.isInMiniApp()
Context is null in components → Ensure FrameProvider is in your provider chain
"Property 'user' does not exist on type 'Promise<MiniAppContext>'" → 在访问属性前需await
sdk.context
"Expected 0 arguments, but got 1" → 移除
sdk.isInMiniApp()
的参数
组件中上下文为null → 确保FrameProvider在你的提供者链中

References

参考链接

  • MAPPING.md — Complete hook-by-hook conversion reference
  • EXAMPLES.md — Before/after code examples
  • PROVIDER.md — Provider setup with FrameProvider
  • PITFALLS.md — Common errors and solutions
  • DEPENDENCIES.md — Package updates
  • AUTH.md — Quick Auth migration
  • MANIFEST.md — farcaster.json changes
  • MAPPING.md — 完整的逐钩子转换参考
  • EXAMPLES.md — 代码示例(转换前后)
  • PROVIDER.md — 使用FrameProvider配置提供者
  • PITFALLS.md — 常见错误与解决方案
  • DEPENDENCIES.md — 包更新指南
  • AUTH.md — Quick Auth迁移指南
  • MANIFEST.md — farcaster.json变更说明