gpt4 book ai didi

javascript - 警告 : Functions are not valid as a React child HOC

转载 作者:行者123 更新时间:2023-11-29 20:46:37 26 4
gpt4 key购买 nike

我正在用 Reactjs 编写 HOC。当我要在 WithErrorHandler 返回类时HOC 我在控制台中收到一条警告说

"Functions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it." However, if I remove class, warning will be gone.

我将为 Modal 添加点击处理程序以使其能够关闭。此外,我将从错误中获取消息,我已将其作为第二个函数的参数传递给 Modal 中的 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>

)
}

}

最佳答案

您的 HOC 正在接受实际组件并返回一个子函数(包装器组件),该函数再次返回一个类组件。

取而代之的是,您的 HOC 应该接受实际组件并返回一个新的包装组件。

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

const WithErrorHandler = WrappedComponent => ({ error, children }) => {
return(
<WrappedComponent>
{error && <Modal type={error.messageType} message={error.message} />}
{children}
</WrappedComponent>
);
};

关于javascript - 警告 : Functions are not valid as a React child HOC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54293312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com