Notion has a pretty awesome API but no React package to render the output of this API! Notion-Blocks gives you the ability to render everything in a single component and provide a helper function to fetch all nested blocks for each page.
Problem
Notion is a fantastic note taking app and great at putting together beautiful documentation, blog posts, tutorials and more quickly. So, whats the problem? well… There are two problems; I want to use Notion to create and share these blog posts on my own React projects, and Notion’s API doesn’t provide information on nested elements (like sub lists)
Solution
I built Notion-Blocks to be able to render all of Notion’s components and provide the user with a backend only helper function that fetches every component, subcomponent and nested components within a given page.
Usage
Using the Notion-Blocks package is super easy to integrate into your own React Project
NotionBlocks
import {NotionBlocks} from 'notion-blocks'
import 'notion-blocks/dist/styles/katex.css'
export const example = () => {
const blocks = BLOCKS_FROM_NOTION_API;
return (
<NotionBlocks blocks={blocks}>
)
}
FetchNotionBlocks
import { FetchNotionBlocks } from 'notion-blocks';
const { cover, response, blocks } = await FetchNotionBlocks({
notionkey: process.env.NOTION_KEY,
notionPageId: PAGE_ID,
});
API
Lets Take a look at some of the props you can pass into this React component or helper function
NotionBlocks
Prop | Type | Description |
---|---|---|
blocks | object | list of blocks that can be acquired from Notion’s API |
codeTheme | string | light or dark |
containerStyle | object | Object to style container where blocks are rendered |
codeOverlay | boolean | To Show overlay in code block that allows users to copy code, and see the language within the code block |
headerStyles | object | Style overrides for headers, These overrides do not include toggle headers |
toggleHeaderStyles | object | Style overrides for toggle headers. These styles do not include the content within the headers |
toggleStyles | object | Style overrides for toggle lists. These styles do not include the content within the headers |
codeStyles | object | styles placed onto the code block container. |
pictureStyles | object | styles for pictures |
calloutStyles | object | styles for callout container |
quoteStyles | object | styles for quote container |
listStyles | object | styles for individual block container |
columnStyles | object | styles for column container |
bookmarkStyles | object | styles for bookmark container |
equationStyles | object | styles for Equation container |
childPageStyles | object | styles for child page container |
tableStyle | object | styles for table container |
tableRowStyle | object | styles for all table rows except headers |
tableHeaderStyle | object | styles for table headers row and columns |
onChildPageClick | function | function to be called if user clicks on child page block. (id, title) => console.log(id, title) |
FetchNotionBlocks
Prop | Type | Description |
---|---|---|
notionKey | string | notion secret key |
notionPageId | string | ID of page you’d like to fetch |
Leave a Reply