Using DM Editor viewing in SSR is same as View DM Editor, just need some extra work: prefetch data.
!!! sample "Some widgets need prefetch"
For example in NewsList widget, the news list data needs to be fetched before page is loaded and it should be on server-side-fetch and widget can render on first visit, then SSO can work.
Below code in NextJS iterates all widgets of this page and invoke dmeServerSideLoad of those widgets.
import { dmeServerSideLoad } from "dmeditor";
export async function getServerSideProps(context) {
// Get current content
const body = content.body; //body stores dmeditor data as js object
try {
await dmeServerSideLoad(body || [], context);
} catch (err) {
//handle error
}
// ...
// Set object to page props
}dmeServerSideLoad invokes all widget's onServerSideLoad using concurrency way.
dmeServerSideLoad has second parameter, which will be passed to widget. In nextjs it's can be context, or merged context object, eg {...context, siteName: siteName }
Below is an example of NewsList widget's onServerSideLoad
const onServerSideLoad = async (existingData, { query }) => {
//get pagination from context's query
let page = query.page ? parseInt(query.page) : 1;
//get limit from settings
const limit = existingData.data.settings.limit || 10;
let offset = (page - 1) * limit;
let bodyObj: any = `/*Fetch sql, graphql, etc*/`;
const { list, count } = await serverFetch(bodyObj);
//update widget data
existingData.data = {
...existingData.data,
list: list,
count: count,
page: page,
};
existingData.serverData = true;
};See widget's SSR Data fetching
Check out nextjs sample project .