首页 > 其他分享 >[React] Using key prop to reset component to avoid useEffect hook

[React] Using key prop to reset component to avoid useEffect hook

时间:2024-04-08 14:55:05浏览次数:13  
标签:reset topic const avoid component selectedTopic selectedTopicId useEffect

The component using useEffect which is not necessary:

function TopicEditor({ selectedTopicId }) {
    const [enteredNote, setEnteredNote] = useState('');
    const selectedTopic = DUMMY_TOPICS.find(topic => topic.id === selectedTopicId)
    
    useEffect(() => {
         if (selectedTopic) {
             setEnteredNOte(selectedTopic.note)
         }
    }, [selectedTopic]);
    
    return (
      ....
    )
}

function App() {
    const [selectedTopicId, setSelectedTopicId] = useState();
    return (
        <TopicEditor selectedTopicId={selectedTopicId} />
    )
}

 

The way we can get rid of useEffect from the TopicEditor component is passing a key prop to it, so everytime when key changes, the TopicEditor component will be reset.

function App() {
    const [selectedTopicId, setSelectedTopicId] = useState();
    return (
        <TopicEditor key={selectedTopicId} selectedTopicId={selectedTopicId} />
    )
}

 

function TopicEditor({ selectedTopicId }) {
    const selectedTopic = DUMMY_TOPICS.find(topic => topic.id === selectedTopicId)    
    const [enteredNote, setEnteredNote] = useState(selectedTopic?.note);

    // useEffect(() => {
    //     if (selectedTopic) {
    //         setEnteredNOte(selectedTopic.note)
    //     }
    // }, [selectedTopic]);
    
    return (
      ....
    )
}

 

标签:reset,topic,const,avoid,component,selectedTopic,selectedTopicId,useEffect
From: https://www.cnblogs.com/Answer1215/p/18121153

相关文章

  • QFComponent for lazarus增加新控件TQFGridPanelComponent
    TQFGridPanelComponent控件支持在单元格绑定可视控件,运行时单元格绑定的控件会吸附到相应的单元格里。|姓名|[#][C2]单位|办公地址|备注||:-:|:-:|:-:|:-:||秋风6|[bm4]检测中心1|南山建工村1|||秋风7|检测中心2|<COMPNAME=name3>[#][c4]南山建工村2|||[c2]地址|<COMPNAME=n......
  • 实习笔记 之 components 包下文件描述
    _util:存放自定义函数AvatarList:显示头像群并支持tip(文字提示)chart:存放各种图表相关的组件,如条形图柱形图折线图等countDown:倒计时组件,该组件有3个属性:target:时间/毫秒数,必填format:该方法接收一个毫秒数的参数,用于格式化显示当前倒计时时间,非必填onEnd:倒计时结束触发......
  • 为什么 InputComponent->BindAxis(TEXT("ViewHorizontalOffSet"),this,&AMarioControl
    在UnrealEngine中,InputComponent->BindAxis和事件绑定(如OnComponentBeginOverlap)使用不同的系统和要求。这些差异导致了在绑定函数时对UFUNCTION()宏的不同需求。BindAxis和UFUNCTION()宏BindAxis:用于绑定输入轴(如游戏手柄的移动或旋转)。当绑定轴输入时,BindAxis函数直接引用......
  • react-lazy-load-image-component
    react-lazy-load-image-component1.6.0 • Public • Published 10monthsago ReadmeCode Beta2Dependencies343Dependents30VersionsReactLazyLoadImageComponentReactComponenttolazyloadimagesandothercomponents/elements.SupportsI......
  • @ComponentScan注解 -【Spring底层原理
    案例已上传GitHub,欢迎star:https://github.com/oneStarLR/spring-annotation一、注解用法1.背景知识什么是组件?组件也是抽象的概念,可以理解为一些符合某种规范的类组合在一起就构成了组件,他可以提供某些特定的功能,但实际他们都是类,只不过有他们特殊的规定。组件......
  • 【componentsearchengine.com网站不容易注册的解决办法,附MPU6050 Proteus原理图仿真模
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、先注册一个国外邮箱注册时注意事项:二、注册componentsearchengine.com网站帐号1.该网站注册注意事项2.一旦帐号注册成功,该网站就可以正常下载了,无需科学上网3.其他问题总结前言最......
  • Extraneous non-props attributes (title) were passed to component but could not b
    大概意思就是给子组件传递的属性,由于子组件呈现片段或文本根节点,无法自动继承;就是"透传Attributes"。对于多根节点的组件没有自动attribute透传行为;如果$attrs没有被显式绑定,将会抛出一个运行时警告。解决方式:手动显示绑定$attrs(1)模板 <template> <h1>多根节点的At......
  • teamcenter中 import com.teamcenter.rac.commonclient.date.DateComponent;的使用
     渲染:Datedate=null; TCPropertyDescriptordescriptor=property.getDescriptor(); Stringpropertyname=descriptor.getName(); if("EOL_Date".equals(propertyname)){// DateComponenta=newDateComponent(); date=property.getDateVa......
  • 关于使用IconData时flutter build apk 打包报错Target aot_android_asset_bundle fail
    flutter项目中引入了iconfont.ttf之后,调试时正常,打包就报错。 网上有的说法是:使用了iconfont.ttf里面不存在的icon,但是我使用的都是在iconfont.tt文件中的icon。 我的情况是使用了switch  case给IconData的codePoint动态赋值,下面这种情况就是打包报错的 解决办法是......
  • vue2 defineComponent 自定义组件的强大功能
    完全可以通过向defineComponent()传入一个选项式API所定义的object,来定义一个组件,并包含各种响应式功能;如下About组件所示:<scriptsetup>import{ref,computed,defineComponent}from'vue'constHome=defineComponent({template:`<h1>Home</h1>`})constAbo......