Reactjs 使用已记忆的React组件重新绘制组件时出错

Reactjs 使用已记忆的React组件重新绘制组件时出错,reactjs,react-memo,Reactjs,React Memo,这是我的导航栏组件。导出一个备忘录 import * as PropTypes from 'prop-types'; import Style from './Navbar.module.scss'; import NavbarItem from './NavbarItem'; import React from 'react'; /** * @param items * @param type */ export default function Navbar({ items }) {

这是我的导航栏组件。导出一个备忘录

import * as PropTypes from 'prop-types';
import Style from './Navbar.module.scss';
import NavbarItem from './NavbarItem';
import React from 'react';

/**
 * @param items
 * @param type
 */
export default function Navbar({ items }) {
  return (
    <nav className={Style.main}>
      {items.map((item, i) => (
        <NavbarItem name={item.name} url={item.url} items={item.items} key={item.name + i} />
      ))}
    </nav>
  );
}

export const MemoizedNavbar = React.memo(Navbar, true);

Navbar.propTypes = {
  items: PropTypes.array.isRequired,
  type: PropTypes.string,
};
import*作为“道具类型”中的道具类型;
从“/Navbar.module.scss”导入样式;
从“./NavbarItem”导入NavbarItem;
从“React”导入React;
/**
*@param项目
*@param类型
*/
导出默认函数导航栏({items}){
返回(
{items.map((item,i)=>(
))}
);
}
export const MemoizedNavbar=React.memo(Navbar,true);
Navbar.propTypes={
项目:需要PropTypes.array.isRequired,
类型:PropTypes.string,
};
使用导航栏的标题

import React, { Fragment, useContext } from 'react';
import Logo from './Logo';
import { MemoizedNavbar } from '../Navbar/Navbar';
import Style from './Header.module.scss';
import { ListContext } from '../../lib/Context/ListContext';
import BrandsHelper from '../../lib/List/BrandsHelper';
import { Items } from '../../config/SiteNavbar';
import Svg from '../Utils/svg';

const {useState} = require("react");

export default function Header({ brand }) {
  const [lists, setLists] = useContext(ListContext);

  const listData = lists.lists[lists.currentListId];

  const [hamburgerMenuOpen, setHamburgerMenuOpen] = useState(false);


  const handleHamburgerClick = () => {
    setHamburgerMenuOpen(!hamburgerMenuOpen);
  }

  return (
    <header className={Style.header}>        
      <section className={Style.section}>
        <Logo brand={brandName} />
        <MemoizedNavbar items={Items} />

        <button className={Style.hamburgerButton} aria-label="Menu" onClick={handleHamburgerClick}>
          <span className={Style.hamburgerButtonClickable} />
        </button>

      </section>
    </header>
  );
}
import React,{Fragment,useContext}来自'React';
从“./Logo”导入徽标;
从“../Navbar/Navbar”导入{MemoizedNavbar};
从“./Header.module.scss”导入样式;
从“../../lib/Context/ListContext”导入{ListContext};
从“../../lib/List/BrandsHelper”导入BrandsHelper;
从“../../config/SiteNavbar”导入{Items};
从“../Utils/Svg”导入Svg;
const{useState}=require(“react”);
导出默认函数头({brand}){
const[lists,setLists]=useContext(ListContext);
const listData=lists.lists[lists.currentListId];
const[HamburgerMinuOpen,setHamburgerMinuOpen]=useState(false);
常量handleHamburgerClick=()=>{
设置HamburgerMinuOpen(!HamburgerMinuOpen);
}
返回(
);
}
单击HambugerButton时,出现以下错误:

如果我不使用memonized组件,它就工作得很好

有什么不对劲吗

export const MemoizedNavbar = React.memo(Navbar, true);
第二个参数应该是一个函数,如:

function areEqual(prevProps, nextProps) {
  /*
  return true if passing nextProps to render would return
  the same result as passing prevProps to render,
  otherwise return false
  */
}
如果你不需要做任何特别的事情,只需要放弃第二个参数,然后做一个肤浅的比较

export const MemoizedNavbar = React.memo(Navbar);

谢谢我得到了
真的不是一个函数
,现在我明白它从哪里来了哈哈。我只想返回true,因为不需要比较任何东西,因为它们是静态数据。所以我认为比较它们只是浪费时间,可以做
React.memo(Navbar,()=>true)然后