对象在React.memo中不能作为React子对象使用

时间:2020-10-19 18:47:15

标签: javascript reactjs react-memo

我收到以下错误

Warning: memo: The first argument must be a component. Instead received: object

Uncaught Error: Objects are not valid as a React child (found: object with keys {$$typeof, type, compare}). If you meant to render a collection of children, use an array instead.

当我更改此组件时会发生

const Tab = () => onLastTab 
    ? <AccountTab data={data.account} />
    : <InfoTab data={data.info} />

要成为此组件,唯一的区别是使用React.memo

const Tab = () => onLastTab 
    ? React.memo(<TabOne data={data.one} />)
    : React.memo(<TabTwo data={data.two} />)

React.memo中包装的那些组件肯定只是看起来像这样的功能组件

const TabOne = ({data}) => (
    <div>
        <div className='d-flex '>
         ...
        </div>
     </div>
 )

为什么会这样?我该怎么做才能阻止它?

1 个答案:

答案 0 :(得分:1)

如错误消息所述,您需要将组件传递给React.memo(),而不是对象。 TabOne显然是一个组件名称,但是您已经创建了该组件的对象并将其通过React.memo()传递。 您需要按以下步骤修复代码:

const TabOne = ({data}) => (
    <div>
        <div className='d-flex '>
         ...
        </div>
     </div>
 )
export default React.memo(TabOne)
const Tab = () => onLastTab 
    ? <TabOne data={data.one} />
    : <TabTwo data={data.two} />