React Storefront调用fulfillAPIRequest报_includeAppData未定义错误如何解决
问题修复方案
你遇到的TypeError: Cannot read property '_includeAppData' of undefined错误是由三处配置疏漏共同导致的,按优先级修复如下:
1 修复API路由的入参错误与缺失逻辑
Next.js原生API路由的导出函数仅包含(req, res)两个入参,你错误定义了参数顺序导致fulfillApiRequest拿到的输入对象不符合预期,同时缺失getAppData定义和响应返回逻辑。
修改/pages/api/index.js代码:
import fulfillApiRequest from 'react-storefront/props/fulfillAPIRequest' // 补充缺失的全局数据获取方法,可按业务需要填充用户信息、站点配置等全局通用字段 async function getAppData() { console.info("Executing 'getAppData' in /api/index.js...") return Promise.resolve({ siteName: "示例站点" // 其他全局字段 }) } function getPageData () { console.info("Executing 'getPageData' in /api/index.js...") return Promise.resolve({ // 填充首页需要的页面级数据 nearbyShops: [] }) } // 修正入参顺序,Next.js API路由只有req、res两个入参 export default async function Index (req, res) { console.info("Executing '/pages/api/index.js' ...") const result = await fulfillApiRequest(req, { appData: () => getAppData(), pageData: () => getPageData() }) // 补充返回响应给前端 res.send(result) }
2 修复首页props传递逻辑
你在首页组件中获取到lazyProps后没有透传给子组件,同时超时配置不合理容易触发请求失败。
修改pages/index.js代码:
import React from 'react' import { fetchFromAPI, createLazyProps } from 'react-storefront/props' import NearbyShops from '../components/shops/nearby-shops.js' // 把接口返回的pageData、appData透传给子组件 export default function Index(lazyProps) { return ( <NearbyShops {...lazyProps} /> ) } // 超时时间调整为合理值,50ms过短容易触发超时中断 Index.getInitialProps = createLazyProps(fetchFromAPI, { timeout: 3000 })
3 修复自定义App的初始化逻辑
你没有将全局数据的序列化逻辑接入_app.js的初始化流程,导致useAppStore无法正常消费数据。
修改_app.js中MyApp.getInitialProps部分代码:
MyApp.getInitialProps = async function({ Component, ctx }) { let pageProps = {} if (Component.getInitialProps) { console.info("Executing _app.js: Invoking Component.getInitialProps...") pageProps = await Component.getInitialProps(ctx) } // 补充全局数据传递逻辑 if (ctx.req && pageProps?.appData) { pageProps.appData = pageProps.appData } return { pageProps } }
完成以上三处修改后重启应用即可解决报错。
内容的提问来源于stack exchange,提问作者Mopparthy Ravindranath
相关产品推荐
相关产品推荐

