react-threads
Embed Static Threads in your React/Next.js application. UI components for Meta’s Threads. Powered by junhoyeo/threads-api.
Demo
📦 Setup
First, install react-threads
with it’s dependencies.
yarn add next react-threads threads-api
yarn add -D tailwindcss postcss autoprefixer
Add path to react-threads
to content sources of your Tailwind Configuration file(tailwind.config.js
).
// tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./src/**/*.{ts,tsx}',
// path to `react-threads`
'node_modules/react-threads/**/*',
],
};
Set images.remotePatterns
to your app’s next.config.js
. We use next/image
to proxy images under the hood.
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: '**.cdninstagram.com',
},
{
protocol: 'https',
hostname: '**.fbcdn.net',
},
],
},
};
module.exports = nextConfig;
🚀 Usage
import { GetStaticProps, NextPage } from 'next';
import { BannerCTA, Thread } from 'react-threads';
import { Thread as ThreadPost, ThreadsAPI } from 'threads-api';
const threadsAPI = new ThreadsAPI();
type Props = {
threadID: string;
thread: ThreadPost;
};
export const getStaticProps: GetStaticProps<Props, { threadId: string }> = async (context) => {
try {
const threadID = context.params?.threadId;
if (!threadID) {
console.log('[!] Thread ID not provided');
return { notFound: true };
}
const postID = await threadsAPI.getPostIDfromThreadID(threadID);
if (!postID) {
console.log(
'[!] Post ID not found with provided Thread ID (in threadsAPI.getPostIDfromThreadID):',
threadID,
);
return { notFound: true };
}
const thread = await threadsAPI.getThreads(postID);
const { containing_thread } = thread;
return {
props: {
threadID,
thread: containing_thread,
},
revalidate: 10,
};
} catch (err) {
console.error('[*] Error fetching Thread', err);
throw err;
}
};
export async function getStaticPaths() {
return {
paths: [],
fallback: true,
};
}
🏴☠️ Useful Building Blocks
- Looking for an API client?
- Using Private Git Submodules when deploying with Vercel?
🏴☠️ Inspired from 🤍
License
MIT © Junho Yeo