日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

解決react-connect中使用forwardRef遇到的問題

瀏覽:338日期:2022-06-10 10:30:28
目錄
  • react-connect使用forwardRef遇到的問題
    • 項目場景
    • 原因
    • 問題描述
    • 解決方案
  • React.forwardRef的使用說明
    • 應(yīng)用場景
    • 但問題來了
  • 總結(jié)

    react-connect使用forwardRef遇到的問題

    項目場景

    之前獨立的兩個tab, tab1和tab2, 由于需求變更, 要把這兩個tab都放到一個tab4下, 變化大概是從圖1變?yōu)閳D2

    原因

    子組件用了使用了connect, 相當(dāng)于把forwardRef隔離了,導(dǎo)致父組件拿不到想要的方法, 所以需要把forwardRef 透傳給使用了connect 的子組件

    問題描述

    tip: 該文章以下內(nèi)容中說的子組件指tab1和tab2, 父組件指tab4

    tab1和tab2組件都有"更新數(shù)據(jù)"按鈕,將他們合并為tab4里面之后,"更新數(shù)據(jù)"按鈕已經(jīng)變成了父組件(tab4)的內(nèi)容, 但是由于按鈕的onClick事件中的邏輯太復(fù)雜, 所以點擊事件沒有挪出來重新寫到父組件里。

    也就是:按鈕在父組件中, 按鈕的點擊事件在子組件里寫。

    子組件和父組件都是用函數(shù)組件 + Hook 寫的, 并且子組件中都用了connect, 此時父組件想調(diào)用子組件的點擊事件方法, 該怎么拿到子組件里的方法呢?

    解決方案

    tip: 我的項目使用的是umi2

    利用Hoc(高階組件)透傳ref

    import React, { forwardRef, useImperativeHandle, useState, useEffect } from "react";import { connect } from "dva"const Children = (props) => {  const { refInstance } = props  const [text, setText] = useState("子組件:Children")  const functionA = () => {    console.log("c2方法")    setText("ref改變了")  }  useImperativeHandle(refInstance, () => ({    functionA,    text,  }))return (    <div>      {text}    </div>)}const newA =  connect((state) => {  return {    list: state.list,  }})(Children)// 使用Hoc 透傳 refexport default forwardRef((props, ref) => <newA  {...props} refInstance={ref} />);

    React.forwardRef的使用說明

    forwardRef實際上就是當(dāng)父組件需要得到子組件元素時,可以利用forwardRef來實現(xiàn)。

    該方法接受一個有額外ref參數(shù)的react組件函數(shù),不調(diào)用該方法,普通的組件函數(shù)是不會獲得該參數(shù)的。

    應(yīng)用場景

    ref 的作用是獲取實例,可能是 DOM 實例,也可能是 ClassComponent 的實例。

    但問題來了

    如果目標(biāo)組件是一個 FunctionComponent 的話,是沒有實例的(PureComponent),此時用 ref 去傳遞會報錯

    React.forwardRef 會創(chuàng)建一個React組件,這個組件能夠?qū)⑵浣邮艿?ref 屬性轉(zhuǎn)發(fā)到其組件樹下的另一個組件中。這種技術(shù)并不常見,但在以下兩種場景中特別有用:

    • 轉(zhuǎn)發(fā) refs 到 DOM 組件
    • 在高階組件中轉(zhuǎn)發(fā) refs

    實例:

    點擊搜索按鈕時,讓文本輸入框處于聚焦?fàn)顟B(tài)

    1、普通用法:

    import React, { Component } from "react"export default class App extends Component {? mytext=null? render() {? ? return (? ? ? <div>? ? ? ? <button type="button" onClick={()=>{? ? ? ? ? console.log(this.mytext);? ? ? ? ? this.mytext.current.focus()? ? ? ? ? this.mytext.current.value="2222"? ? ? ? }}>獲取焦點</button>? ? ? ? <Child callback={(el)=>{? ? ? ? ? console.log(el);、? ? ? ? ? //el是臨時變量,用全局的去接這個值? ? ? ? ? this.mytext=el? ? ? ? ? //console.log(el.current);? ? ? ? }}/>? ? ? </div>? ? )? }}class Child extends Component {? mytext = React.createRef();? //組件渲染完了執(zhí)行? componentDidMount() {? ? this.props.callback(this.mytext);? }? render() {? ? return (? ? ? <div style={{background:"yellow"}}>? ? ? ? <input defaultValue="1111" ref={this.mytext}></input>? ? ? </div>? ? );? }}

    2、使用forwardRef

    import React, { Component,forwardRef } from "react"export default class App_forwardRef extends Component {? mytext=React.createRef()? render() {? ? return (? ? ? <div>? ? ? <button type="button" onClick={()=>{? ? ? ? console.log(this.mytext);? ? ? ? this.mytext.current.value="2222"? ? ? }}>獲取焦點</button>? ? ? <Child ref={this.mytext}/>? ? ? </div>? ? )? }}//這里Child是函數(shù)式組件const Child=forwardRef((props,ref)=>{? ? return (? ? ? <div>? ? ? ? <input defaultValue="11111" ref={ref}></input>? ? ? </div>? ? );})

    總結(jié)

    以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持。

    標(biāo)簽: JavaScript
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    成人片免费看| 日本一区二区高清不卡| 麻豆精品在线观看| 欧美一区免费| 日韩中文字幕无砖| 亚洲久草在线| 中文一区一区三区免费在线观| 国产乱人伦精品一区| 综合五月婷婷| 日韩高清一区在线| 国产精久久久| 国产91在线精品| 日韩精品网站| 欧美精品九九| 伊人久久亚洲| 国产欧美日韩视频在线 | 美女久久久久久| 国产精品主播| 国产成人精选| 亚洲性色视频| 亚洲人成毛片在线播放女女| 日韩激情精品| 另类小说一区二区三区| 日韩国产一区| 尤物精品在线| 热久久久久久| 四季av一区二区凹凸精品| 999久久久免费精品国产| 99pao成人国产永久免费视频| 日韩av网站免费在线| 国产亚洲欧美日韩精品一区二区三区 | 亚州av乱码久久精品蜜桃| 国产伦精品一区二区三区千人斩| 91久久久精品国产| 亚洲欧美久久| 日本va欧美va精品发布| 久久69成人| 午夜精品网站| 91九色综合| 日本а中文在线天堂| 亚洲欧美不卡| 国产精品主播在线观看| 久久精品影视| 日韩精品免费视频一区二区三区| 自拍日韩欧美| 丝袜美腿亚洲色图| 日韩avvvv在线播放| 欧美黄色一区二区| 欧美日韩精品在线一区| 午夜电影一区| 日韩欧美高清一区二区三区| 99精品综合| 香蕉久久久久久久av网站| 久久精品99久久久| 清纯唯美亚洲综合一区| 国产一区二区三区久久| 亚洲在线一区| 精品久久一区| 在线一区二区三区视频| 日韩免费看片| 亚洲69av| www.com.cn成人| 日韩激情一区二区| 欧美一区二区三区高清视频 | 日本va欧美va精品发布| 91一区二区三区四区| 久久一二三区| 国产成年精品| 国产一区二区三区亚洲| 亚洲黄页一区| 国产成人精品一区二区三区在线| 久久中文在线| 婷婷精品进入| 精品淫伦v久久水蜜桃| 久久国产精品亚洲77777| 91视频久久| 欧美亚洲免费| 好吊日精品视频| 蜜臀精品久久久久久蜜臀| 99xxxx成人网| 国产激情精品一区二区三区| 美女久久网站| 日韩欧美中文| 国产精品对白久久久久粗| 99亚洲精品| 成人一区不卡| 欧美亚洲三级| 午夜久久影院| 吉吉日韩欧美| 国产极品嫩模在线观看91精品| 国产亚洲精品美女久久久久久久久久| 视频一区视频二区中文字幕| 蜜臀国产一区二区三区在线播放 | 亚洲我射av| 午夜久久中文| 麻豆精品在线视频| 欧美一区91| 尤物精品在线| 宅男噜噜噜66国产日韩在线观看| 午夜精品福利影院| 成人欧美一区二区三区的电影| 国产综合色区在线观看| 日韩精品视频一区二区三区| 欧美91在线|欧美| 六月丁香综合| 欧美日韩视频一区二区三区| 久久久久美女| 国产中文在线播放| 日本欧美国产| 精品久久福利| 久久精品福利| 99久久九九| 日韩中文字幕不卡| 五月天激情综合网| 亚洲黄色免费看| 国产成人精品免费视| 国产精品22p| 欧美国产免费| 欧美国产另类| 国产极品久久久久久久久波多结野 | 欧美精品aa| 水野朝阳av一区二区三区| 亚洲深夜av| 国产亚洲毛片| 亚洲欧美视频| 久久中文字幕一区二区三区| 国产亚洲精品美女久久| 1024精品一区二区三区| 日韩电影在线视频| 日本欧美不卡| 欧美午夜精彩| 午夜久久福利| 欧美资源在线| 最新国产精品| 日韩高清在线不卡| 国产另类在线| 久久免费精品| 欧美亚洲日本精品| 一本一道久久a久久精品蜜桃| 国产精品一区高清| 精品一区欧美| 宅男在线一区| 老牛国产精品一区的观看方式| 91亚洲国产| 亚洲精品无吗| 日本精品在线播放| 精品国产亚洲日本| 亚洲啊v在线| 亚洲福利国产| 六月丁香综合| 国产乱码精品| 性欧美videohd高精| 日韩视频在线一区二区三区| 综合激情在线| 日韩精品免费视频一区二区三区 | 久久精品电影| 欧美91精品| 亚洲人成精品久久久| 国产精品久久久久毛片大屁完整版 | 国产精品成久久久久| 亚洲伊人av| 午夜在线精品偷拍| 97精品国产99久久久久久免费| 香蕉精品久久| 一区免费在线| 日韩一区精品| 蜜桃久久精品一区二区| 青青国产91久久久久久| 免费精品一区| 亚洲第一区色| 日韩激情综合| 涩涩av在线| 亚洲伊人精品酒店| 久久xxxx精品视频| 日本午夜精品一区二区三区电影| 欧美日韩国产一区精品一区| 日韩在线观看| 亚洲午夜久久久久久尤物| 蜜臀av国产精品久久久久 | 日韩精品免费视频一区二区三区| 国产婷婷精品| 91九色综合| 久久久精品久久久久久96| 日韩国产在线观看一区| 毛片在线网站| a日韩av网址| 久久午夜精品| 国内精品亚洲| 免费精品视频最新在线| 国产精品2区| 9国产精品视频| 久久不见久久见中文字幕免费| 国产精品天天看天天狠| 成人羞羞视频播放网站| 日韩精品一卡| 天堂久久一区| 久久精品导航| 国产精品三级| 蜜臀a∨国产成人精品| 亚洲1234区|