当前位置: 首页 > 知识库问答 >
问题:

尝试动态包含SSR包的组件时,函数作为React子级无效

欧阳博文
2023-03-14

在我的快速路由中,我正在尝试传递一个要在渲染函数中使用的组件,该组件处理 SSR。

快速路线:

import SettingsConnected from '../../../client/components/settings/settings-connected';

function accountTab(req, res, next) {
  sendToRenderApp(req, res, { profileInfo }, url, SettingsConnected);
}

渲染助手:

export const sendToRenderApp = (req, res, storeObj = {}, urlPath, componentFunc) => {
  const store = configureStore(storeObj);
  const dynamicComponent = componentFunc;

  const component = (
    <Provider store={store}>
      <React.Fragment>
        <dynamicComponent />
      </React.Fragment>
    </Provider>
  );

  const sheet = new ServerStyleSheet();
  const app = renderToString(sheet.collectStyles(component));

错误:

“警告:函数作为React子函数无效。如果您返回组件而不是从渲染中返回,可能会发生这种情况。或者您可能打算调用此函数而不是返回它。”

我已经看过的东西包括下面的这个答案,但是我不确定如何将这样一个函数封装在提供者组件中(我是这么认为的)?

函数作为React子函数无效。如果返回组件而不是从渲染返回组件,则可能会发生这种情况

共有1个答案

桓瀚
2023-03-14

回答自己的问题:原来是客户水合物的问题。上面的这段代码一直都很好 - :facepalm:

 类似资料:
  • 好的,所以我加载根网址。应该呈现一个帖子列表,相反,我得到了臭名昭着的React错误...... index.js和app.js似乎可以正确呈现。我相信故障出在PostList组件,也许是render方法?我知道解决方法可能很简单,但我看不出来。 index.js 应用.js post-list.js

  • 我已经更新了我的路由器,以接受第二条主要路线。 当我在我的应用程序中导航到“/manager”时,我得到一个错误: 警告:函数作为React子级无效。如果您返回一个组件而不是从render返回,可能会发生这种情况。或者你想调用这个函数而不是返回它。在未知(由RouterContext创建)在路由器的RouterContext(由路由器创建)中 // AdminContainer.js //User

  • 但是,如果我这样使用它,我会得到一个错误: 对象作为React子级无效(找到:具有键{dispatchConfig,_TargetInst,_DispatchListeners,_DispatchInstances,nativeEvent,type,target,currentTarget,eventPhase,bubbles,cancelable,timeStamp,defaultPrevent

  • 我想知道哪种方法是测试不返回任何函数(只更改一个字段值)并包含异步调用的最佳方法。 这是我要测试的AngularJS控制器,我调用的服务返回一个promise(总是返回{name:"John"}): 如果sayHello函数不包含异步调用,这将是规范,但它总是失败,因为scope.greeting总是空的。 我将如何使用此规范来处理异步调用?我真的不明白如何以及在哪里使用Jasmine 2.0的“

  • 问题内容: 尽管这里有一个相同的问题,但是我找不到我的问题的答案,所以这里是我的问题: 我正在使用mocha和chai测试我的node js应用程序。我正在用sinion封装功能。 当我尝试运行此测试时,它给了我错误 我也尝试过 在每个描述中,但仍然给我相同的错误。 问题答案: 您应该恢复in 功能,请按以下方法尝试。

  • 我有一个由32个数字组成的数组[1,2,3,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,7,7,7,7,8,9,10,10,11,9,12,13,13,14,14,15,16,17,17] 对于我最初的问题,我不需要生成所有的排列。我只需要在每次运行我的程序时生成一个随机排列。 我的方法是使用Fisher-Yates算法随机洗牌数组,并不断重新洗牌,直到我得到所有8个子数组,没有重