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

react.js - 父子组件都使用memo,兄组件切换显示,弟组件重新渲染,memo为啥失效?

衡高寒
2023-10-30

父组件:

<div className={'myScreenDetail'}>      {isView && <ImageView imgUrl={imgSrc} setIsView={setIsView} />}      <ImgShow />    </div>

子组件:

<ImgShow /> useEffect(() => {    console.log('渲染了');  }, []);

父组件和子组件都是用了memo:image.png,切换isView,理应ImgShow组件不重新渲染,但是isView切换,都会打印“渲染了”,memo感觉失效了,这是为什么啊?求大佬指教
image.png

共有1个答案

凌宏大
2023-10-30

请把 App 组件内部定义的其他组件全部提取出去 单独定义,因为 app更新 这些函数都会重新定义

import "./styles.css";import { memo, useEffect, useState } from "react";export default function App() {  const [isView, setIsView] = useState(false);  useEffect(() => {    console.log("渲染1");  });  return (    <div className="App">      <ImgShow setIsView={setIsView} isView={isView}/>    </div>  );}const Test = memo(() => {  useEffect(() => {    console.log("渲染2");  });  return <div>测试1111111</div>;});const ImgShow = memo(({setIsView , isView}) => {    useEffect(() => {    console.log("渲染3");  });  return (    <div>      <div        style={{          width: "100px",          height: "100px",          backgroundColor: "red"        }}        onClick={() => {          setIsView(!isView);          console.log(5555555, isView);        }}      ></div>      <Test />    </div>  );});
 类似资料:
  • 我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长

  • 诉求:react父组件某些值改变后,需要让子组件同步更新,但是这个过程不能让父组件重新渲染 请帮忙罗列下所有可能的方式

  • 我正在学习如何应对,我整天都在试图找到解决问题的办法,但都没有成功。然后决定在这里提出我的第一个问题。 我有子组件,包括React-Datepicker组件和单独的“第二天”和“前一天”按钮来更改选定的日期。 SelectedDate存储在父组件的状态中。 我试图从子组件更新父组件的状态,当状态更新时,子组件应该重新呈现,因为该状态作为道具传递给同一个子组件。 我已设法从child更改父状态,但子

  • 问题内容: 我被困住了。我在单独的文件上有几个单独的组件。如果我在main.jsx中渲染它们,如下所示: 一切正常,但我想知道这是否是一个好习惯?也许可以做一些像只有一个ReactDom.render这样的事情: 我尝试了各种LandingPageBox变量,以某种方式包括了其他两个组件,但没有运气。它们有时在页面外渲染,依此类推。我认为应该看起来像这样: 但是此代码仅呈现PageTop和Page

  • 场景 我有一个父组件,里面包含一个子组件,子组件传入了一个对象,假设对象是字面量。当我的父组件更新时,子组件也会更新。导致不必要的渲染。 尝试 1.通过使用React.memo包裹子组件,作用是父组件更新,子组件只有当props变化才变化。结果发现还是不对。。。。分析了一下原因是,当父组件更新时候,传入到子组件的的引用发生了变化,虽然值是相同的。。。咋搞

  • ant design +Table组件 + Switch组件组合使用 在 输出的checked都为true了,但是Switch没有选中, 甚至我对table的data数据进行了useMemo了还是不行, ant design +Table组件 + Switch正常的渲染