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

警告:函数作为反应子 HOC 无效

杨昊
2023-03-14

我正在用回复写一个 HOC。当我要返回类与错误汉德勒 HOC 我得到一个警告在控制台说

函数作为React子级无效。如果您返回一个组件而不是< code >,可能会发生这种情况

我将为模式添加click处理程序,使其能够关闭。另外,我将从错误中得到消息,我已经将其作为第二个函数的参数传递给了模态中的show。

import React, { Component } from 'react';
import Modal from '../Modal'

const WithErrorHandler = WrappedComponent => ({ error, children }) => {

return(

  class extends Component {
state = {modalShow: false}   
modalToggle = ()=> {
this.setState(ModalShow: !!error.message)}
    render() {
      return (
        <WrappedComponent>
          {error && <Modal type={error.messageType} message={error.message} />}
          {children}
        </WrappedComponent>
      );
      }
    }

)  
};

const DivWithErrorHandling = WithErrorHandler(({children}) => {
  return children
})

class App extends Component {
    state ={error: null}
    someMethode = ()=> {
      const sampleError = {//an object with message key}
      this.setState(error: sampleError)
    }
    Render(){
        return (
          <DivWithErrorHandling error={this.state.error} >
            <h1>Component</h1>
            <button onClick={this.someMethode}>
               Toggle Error
            </button>
          </DivWithErrorHandling>

        )
    }

}

共有2个答案

周墨一
2023-03-14

HOC 是一个接受组件并返回新组件的函数

您的代码:

const WithErrorHandler 
    = WrappedComponent // takes a component
         => ({ error, children }) // takes some params
              => class ... // returns a new component

你真正想要的:

const WithErrorHandler 
    = WrappedComponent // takes a component
         => class ... // returns a new component
            // inside the class use this.props.error, this.props.children, etc.

另一种方式(使用功能组件):

const WithErrorHandler 
    = WrappedComponent // takes a component
         => ({ error, children }) =>  <WrappedComponent>...</WrappedComponent> // returns a new component
景胜涝
2023-03-14

您的HOC正在接受实际组件

相反,您的 HOC 应该接受实际的组件

这应该可以解决您的问题。

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

  • 我是React新手,在Hooks的帮助下,我正在React中开发简单的CRUD应用程序。< br >该应用程序有两个表单组件< code>AddUserForm和< code>EditUserForm,它们相应地添加和编辑用户列表。还有一个显示用户列表的组件(但是我没有得到警告)。< br >一切正常,但是我的浏览器控制台中出现以下警告消息:< br>

  • 我已经创建了一个高阶组件,它应该为我的组件添加一些额外的功能。然而,当我在这个组件中使用反应钩子时,我会得到以下eslint警告。 不能在回调内调用React钩子“React.useffect”。必须在React函数组件或自定义React钩子函数中调用React钩子。(吊钩/吊钩规则) 为什么我会收到这个警告?在HoC中使用钩子被认为是不好的做法吗? 最简单的例子: Codesandbox:htt

  • 我有以下代码: 但我得到了以下错误: 未捕获的不变违规:对象作为React子对象无效(找到:带有键{正文、附件、视频、主题、updated_at、id、主题、反对票、作者、posted_at、注释、user_vote、好评、状态、标签、位置、track_impact、user_is_following、comments_count}的对象)。如果要呈现子集,请使用数组来代替,或者使用React加载

  • reactapollo中的graph qlhoc帮助将组件与查询连接起来。因此查询将执行,结果将作为组件中的道具可用。 是否有一种方法可以不直接执行查询,而是将函数作为prop传递给可以作为组件内的正常函数调用执行的函数。因为我有一个查询,需要在用户选择组件中的一些选项后执行。 如 这可以通过直接使用apollo客户端来实现。但是否有任何方法可以在graphql hoc的帮助下使用它呢。因此,组件

  • 我用这篇文章作为例子(React way),但它对我不起作用。请指出我的错误,因为我不明白出了什么问题。 这就是我看到的错误: 错误:this.props.on点击不是一个函数 这是我的密码: 提前谢谢!