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

您的位置:首頁技術文章
文章詳情頁

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

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

    react-connect使用forwardRef遇到的問題

    項目場景

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

    原因

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

    問題描述

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

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

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

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

    解決方案

    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實際上就是當父組件需要得到子組件元素時,可以利用forwardRef來實現(xiàn)。

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

    應用場景

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

    但問題來了

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

    React.forwardRef 會創(chuàng)建一個React組件,這個組件能夠將其接受的 ref 屬性轉發(fā)到其組件樹下的另一個組件中。這種技術并不常見,但在以下兩種場景中特別有用:

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

    實例:

    點擊搜索按鈕時,讓文本輸入框處于聚焦狀態(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>? ? );})

    總結

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

    標簽: JavaScript
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    蜜桃av一区二区三区电影| 国产成人精品亚洲线观看| 日韩专区欧美专区| 日本亚州欧洲精品不卡| 国产精品一区二区精品视频观看 | 中文无码日韩欧| 亚洲一级网站| 一级成人国产| 美女精品一区二区| 国产精品玖玖玖在线资源| 国产在线观看www| 国产亚洲精品v| 免费人成精品欧美精品| 久久狠狠亚洲综合| 国产精品一国产精品k频道56| 亚洲视频国产精品| 日韩在线二区| 天堂av在线| 日韩综合一区二区| 国产精品久久观看| 日韩大片在线观看| 国产日韩亚洲| 精品一区二区三区免费看| 欧美激情aⅴ一区二区三区 | 精品国产a一区二区三区v免费| 成人羞羞视频在线看网址| 久久av一区| 97精品一区| 久久99伊人| 老司机免费视频一区二区| 亚洲精品亚洲人成在线观看| 精品少妇一区| 精品一区二区三区中文字幕视频| 国产一区二区三区四区五区 | 日韩大片在线| aⅴ色国产欧美| 国产精品美女久久久久久不卡| 久久影视一区| 亚洲日本国产| 免费观看久久av| 亚洲婷婷丁香| 国产精品色网| 国产精品毛片久久久| 亚洲毛片在线| 国产欧美一级| 国产夫妻在线| 亚洲三级毛片| 久久精品99国产精品日本| 成人在线观看免费视频| 激情久久婷婷| 精精国产xxxx视频在线野外| 日韩国产精品久久久久久亚洲| 国产精品2023| 亚洲综合婷婷| 亚洲专区视频| 精品三区视频| 国产精品7m凸凹视频分类| 日本不卡不码高清免费观看| 国产探花一区在线观看| 亚洲综合色婷婷在线观看| 国产亚洲精品美女久久| 国产精品毛片在线| 日韩精品一区二区三区免费观影 | 91一区二区三区四区| 精品欧美日韩精品| 麻豆mv在线观看| 水野朝阳av一区二区三区| 中文字幕日韩高清在线| 国产精品亚洲成在人线| 国产日产精品一区二区三区四区的观看方式| 老牛国产精品一区的观看方式| 欧美aaaaaa午夜精品| 麻豆一区二区三| 红桃视频国产一区| 久久99性xxx老妇胖精品| 日韩在线黄色| 久久亚洲精品中文字幕蜜潮电影| 日韩欧美精品一区二区综合视频| 日韩一区亚洲二区| 伊人久久大香伊蕉在人线观看热v| 精品99久久| 中文字幕一区久| 91欧美日韩在线| 亚洲成人va| 欧美sm一区| 欧美日韩亚洲一区三区| 久久精品国产在热久久| 欧美国产视频| 亚洲精选av| 欧美一级网站| 国产一区二区精品| 老牛国内精品亚洲成av人片| 国产精品一区毛片| 亚洲特级毛片| 丝袜诱惑制服诱惑色一区在线观看 | 国产欧美啪啪| 亚洲欧美日韩精品一区二区| 鲁大师精品99久久久| 日韩精品一二三| 亚洲制服欧美另类| 国产不卡精品| 女人av一区| 蜜臀久久99精品久久久久久9| 激情欧美丁香| 日本欧美在线看| 亚洲欧洲午夜| 一级成人国产| 99精品电影| 婷婷色综合网| 日韩欧美中文字幕在线视频| 97精品资源在线观看| 久久香蕉国产| 91精品国产调教在线观看| 国产伦精品一区二区三区千人斩| 99国产精品久久久久久久成人热| 天堂av在线| 激情欧美一区| 国产极品模特精品一二| 国产99久久久国产精品成人免费| 97精品中文字幕| 亚洲精品成人一区| 欧美日韩国产综合网| 欧美激情 亚洲a∨综合| 韩日一区二区三区| 日韩久久精品网| 91成人超碰| 天堂va在线高清一区| 久久亚洲精品伦理| 视频一区在线播放| 亚洲精品一二三**| 国产剧情一区二区在线观看| 国产精品视频3p| 青草久久视频| 亚洲主播在线| 红桃视频国产精品| 丝袜诱惑一区二区| 免费日韩精品中文字幕视频在线| 在线一区免费观看| 婷婷激情综合| 国产精品麻豆成人av电影艾秋| 国产在视频一区二区三区吞精| 久久影院一区| 免费看av不卡| 蜜桃精品在线| 午夜国产精品视频免费体验区| 欧美日韩国产一区精品一区| 亚洲精品乱码日韩| 国产麻豆一区二区三区精品视频| 中文一区一区三区高中清不卡免费| 蜜桃久久av一区| 日韩黄色av| 国产不卡人人| 中文字幕一区二区av| 日韩精品亚洲aⅴ在线影院| 免费日韩一区二区三区| 精品视频一区二区三区四区五区| 欧美日韩亚洲一区二区三区在线 | 国产中文字幕一区二区三区| 婷婷综合一区| 国产精品一级| 久久精品亚洲| 亚洲爱爱视频| 亚洲三级欧美| 亚洲一区欧美二区| 日韩天堂在线| 色婷婷久久久| 亚洲2区在线| 国产精品v亚洲精品v日韩精品| 日韩欧美久久| 91亚洲无吗| av中文资源在线资源免费观看| 久久三级毛片| 在线亚洲欧美| 日本综合视频| 欧美日韩尤物久久| 亚洲精品美女91| 电影亚洲精品噜噜在线观看| 免费看久久久| 好看的亚洲午夜视频在线| 亚洲久久一区| 久久中文在线| 91精品国产福利在线观看麻豆| 欧美精品影院| 粉嫩av一区二区三区四区五区 | 日本在线观看不卡视频| 一级成人国产| 日韩不卡一区二区三区| 日韩高清在线不卡| 久久久久欧美精品| 亚洲成人av观看| 日韩视频一区二区三区在线播放免费观看| 亚洲精品成人一区| 欧美丰满日韩| 青青草伊人久久| 亚洲免费精品| av综合电影网站| 久久精品国产福利| 麻豆91精品| 欧美日韩中文一区二区| 亚洲精品va|