记一个React.memo引起的bug.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

记一个React.memo引起的bug

目录一般memo用法:问题描述解决方法方案一.使用useRef+forceUpdate方案方案2.使用useCallback总结与PureComponent不同的是PureComponent只是进行浅对比props来决定是否跳过更新数据这个步骤,memo可以自己决定是否更新,但它是一个函数组件而非一个类,但请不要依赖它来阻止渲染,因为这会产生bug。

一般memo用法:

importReactfromreact;

functionMyComponent({props}){

??console.log(111);

??return(

????div{props}/div

??)

functionareEqual(prevProps,nextProps){

??if(prevProps.seconds===nextProps.seconds){

????returntrue

??}else{

????returnfalse

??}

exportdefaultReact.memo(MyComponent,areEqual)

问题描述

我们在处理业务需求时,会用到memo来优化组件的渲染,例如某个组件依赖自身的状态即可完成更新,或仅在props中的某些数据变更时才需要重新渲染,那么我们就可以使用memo包裹住目标组件,这样在props没有变更时,组件不会重新渲染,以此来规避不必要的重复渲染。

下面是我创建的一个公共组件:

typeProps={

?inputDisable:boolean

?//是否一直展示输入框

?inputVisible:boolean

?value:any

?min:number

?max:number

?onChange:(v:number)=void

constInputNumber:FCProps=memo(

?(props:Props)={

??const{inputDisable,max,min,value,inputVisible}=props

??consthandleUpdate=(e:any,num)={

???e.stopPropagation()

???props.onChange(num)

??return(

???ViewclassName={styles.inputNumer}

????{(value!==0||inputVisible)(

?????

??????Image

???????className={styles.btn}

???????src={require(value=min

????????../../assets/images/reduce-no.png

????????:../../assets/images/reduce.png)}

???????e=handleUpdate(e,value-1)}

???????mode=aspectFill

??????/

??????Input

???????value={value}

???????disabled={inputDisable}

???????alwaysEmbed

???????type=number

???????cursor={-1}

???????onInput={e=handleUpdate(e,parseInt(e.detail.valuee.detail.value:0),input)}

??????/

?????/

????)}

????Image

?????className={styles.btn}

?????src={require(max!==-1(value=max||minmax)

??????../../assets/images/plus-no.png

??????:../../assets/images/plus.png)}

?????e=handleUpdate(e,value+1)}

????/

???/View

?(prevProp

文档评论(0)

182****6697 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档