Skip to main content

ServerFetch Function

The serverFetch is an async function which is called during server side rendering, developers can add any async data resolvers that must be resolved on the server before rendering the current page. The syntax for serverFetch function:

function serverFetch({ fpi, router }) : Promise<any>

Theme pages must be exported as default components from the pages directory. In the ~/theme/index.jsx file, the page should be returned from within the default exported bootstrap function. To create a separate chunk for the page, developers can use Webpack’s dynamic import() syntax to load the component asynchronously.

note

Make sure the webpack's ChunkName matches the key for the component in the returned object.

Example for Product Listing page

import React from "react";
import { useGlobalStore } from "fdk-core/utils";

const ProductListing = ({ fpi }) => {
// Store Data is available using useGlobalStore
const productLists = useGlobalStore(fpi.getters.PRODUCTS) || {};
// Use `fpi` to fetch data from SDK and update store

// This is an example implementation
useEffect(() => {
if (!productLists) {
fpi.products.fetchProducts({});
}
}, [productLists]);

return (
<>
{
// Return UI based on store data
}
</>
);
};

ProductListing.serverFetch = async ({ fpi, router }) => {
const queries = router.filterQuery;
let defaultQuery = {
pageNo: 1,
pageSize: 12,
};
defaultQuery = { ...defaultQuery, ...queries };
return fpi.products.fetchProductListing(defaultQuery);
};

export default ProductListing;

And in index.jsx file,

import FPIClient from "fdk-store";
import customTemplates from "./custom-templates";
import "./styles/base.less";
import sections from "./sections";
import Header from "./components/header/header";
import Footer from "./components/footer/footer";
import { globalDataResolver, pageDataResolver } from "./lib";

export default async ({
applicationID,
applicationToken,
domain,
storeInitialData,
}) => {
const fpiOptions = {
applicationID,
applicationToken,
domain,
storeInitialData,
};

const { client: fpi } = new FPIClient(fpiOptions);

return {
fpi,
sections,
customTemplates,
globalDataResolver,
pageDataResolver,
getHeader: () => Header,
getFooter: () => Footer,
getProductListing: () =>
import(
/* webpackChunkName:"getProductListing" */ "./pages/product-listing"
),
// ... other pages
};
};

Was this section helpful?