React中TypeError 'cb is not a function'错误:prepare函数调用问题
问题分析与解决方案
错误原因
你的prepare是高阶函数:接收store和component后,返回的是另一个需要nextState和cb两个参数的函数。
你调用prepare(store, component)时,仅获取到了这个嵌套的函数;若直接执行该返回函数却未传入cb参数,内部执行cb(null, component)时,cb为undefined,就会抛出TypeError 'cb is not a function'错误。
解决方案
分两种场景处理:
场景1:需要保留高阶函数结构(如路由预加载等场景)
如果prepare是为了适配需要(nextState, cb)格式函数的场景(比如React Router的onEnter),调用时需传入完整参数:
// 方式1:直接执行返回的函数并传入参数 prepare(store, component)(yourNextState, (err, comp) => { // 在这里处理返回的component console.log(comp); }); // 方式2:将返回的函数传入对应场景(如路由配置) const routeConfig = { path: '/target-page', onEnter: prepare(store, TargetComponent) };
场景2:希望直接调用prepare就返回component
如果需求是调用prepare(store, component)直接拿到component,修改prepare的结构,去掉嵌套函数:
const prepare = (store, component) => { const { dispatch, getState } = store; const state = getState(); const pageState = getPageState(state); const { init, dirty } = pageState; const { app: { branch } } = state; // 执行你的业务逻辑 // 直接返回component return component; }; // 现在调用即可直接获取component const targetComponent = prepare(store, component);
内容的提问来源于stack exchange,提问作者Aarish Mannan
相关产品推荐
相关产品推荐

