最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react-redux的connect與React.forwardRef結(jié)合ref失效的解決

 更新時間:2023年05月12日 08:59:11   作者:隨風(fēng)丶逆風(fēng)  
這篇文章主要介紹了react-redux的connect與React.forwardRef結(jié)合ref失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

react-redux的connect與React.forwardRef結(jié)合ref失效

開發(fā)中遇到connect包裹forwardRef組件后,ref引用失效,返回undefined的問題。

const CompA = React.forwardRef<OutputInterface, IProps>((props, ref) => {
? // ...
})
export default connect(mapStateToProps, mapDispatchToProps)(CompA);

原因

源碼:React.forwardRef

從下面截取的源碼中,可以看到forwardRef返回的是一個元素對象,包含了元素的類型REACT_FORWARD_REF_TYPE,以及渲染組件函數(shù)render方法,而connect需要的是組件,故透傳出現(xiàn)問題。

import {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from 'shared/ReactSymbols';
export function forwardRef<Props, ElementType: React$ElementType>(
? render: (props: Props, ref: React$Ref<ElementType>) => React$Node,
) {
? // 省略邊界條件判斷
? const elementType = {
? ? $$typeof: REACT_FORWARD_REF_TYPE,
? ? render,
? };
? if (__DEV__) {
? ? let ownName;
? ? Object.defineProperty(elementType, 'displayName', {
? ? ? enumerable: false,
? ? ? configurable: true,
? ? ? get: function() {
? ? ? ? return ownName;
? ? ? },
? ? ? set: function(name) {
? ? ? ? ownName = name;
? ? ? ? if (!render.name && !render.displayName) {
? ? ? ? ? render.displayName = name;
? ? ? ? }
? ? ? },
? ? });
? }
? return elementType;
}

解決辦法

方法一:調(diào)用forwardRef返回值中的render方法 

const CompA = React.forwardRef<OutputInterface, IProps>((props, ref) => {
? // ...
})
// 直接通過render獲取渲染組件
export default connect(mapStateToProps, mapDispatchToProps)(CompA.render);

方法二:connect第4個參數(shù)可以設(shè)置{forwardRef: true}實現(xiàn)透傳 

const CompA = React.forwardRef<OutputInterface, IProps>((props, ref) => {
? // ...
})
// 直接通過render獲取渲染組件
export default connect(mapStateToProps, mapDispatchToProps, null, {
? forwardRef: true
})(CompA);

dva/redux的connect 和useRef/forwardRef混用的問題

因為要做table 滾動條高度緩存,所以用了umi-plugin-keep-alive插件,導(dǎo)致被包裹的子組件useffect失效。

故用父組件使用ref 調(diào)用子組件的getList方法實現(xiàn)頁面更新。 但是項目用的Dva,和useRef 一起用ref會失效。

解決方法

在connect 方法的第四個參數(shù)加 forwardRef: true,即可實現(xiàn)透傳效果,其余部分不變。

其余部分用法不變。

  • 父組件:

  • 子組件:

總結(jié)

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

相關(guān)文章

  • React快速入門教程

    React快速入門教程

    本文主要介紹了React的相關(guān)知識,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Remix中mdx?table不支持表格解決

    Remix中mdx?table不支持表格解決

    這篇文章主要為大家介紹了Remix中mdx?table不支持表格問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 淺談React Native Flexbox布局(小結(jié))

    淺談React Native Flexbox布局(小結(jié))

    這篇文章主要介紹了淺談React Native Flexbox布局(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 基于webpack開發(fā)react-cli的詳細(xì)步驟

    基于webpack開發(fā)react-cli的詳細(xì)步驟

    這篇文章主要介紹了基于webpack開發(fā)react-cli的詳細(xì)步驟,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • React 子組件向父組件傳值的方法

    React 子組件向父組件傳值的方法

    本篇文章主要介紹了React 子組件向父組件傳值的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • React createElement方法使用原理分析介紹

    React createElement方法使用原理分析介紹

    這篇文章主要為大家介紹了React的createElement方法源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • React實現(xiàn)表格選取

    React實現(xiàn)表格選取

    這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)表格選取,類似于Excel選中一片區(qū)域并獲得選中區(qū)域的所有數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React組件的應(yīng)用介紹

    React組件的應(yīng)用介紹

    React組件分為函數(shù)組件與class組件;函數(shù)組件是無狀態(tài)組件,class稱為類組件;函數(shù)組件只有props,沒有自己的私有數(shù)據(jù)和生命周期函數(shù);class組件有自己私有數(shù)據(jù)(this.state) 和 生命周期函數(shù)
    2022-09-09
  • React?狀態(tài)管理工具優(yōu)劣勢示例分析

    React?狀態(tài)管理工具優(yōu)劣勢示例分析

    這篇文章主要為大家介紹了React?狀態(tài)管理工具優(yōu)劣勢示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項目架構(gòu)

    React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項目架構(gòu)

    這篇文章主要為大家介紹了React構(gòu)建簡潔強(qiáng)大可擴(kuò)展的前端項目架構(gòu)實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評論

凭祥市| 沅陵县| 广平县| 辽阳市| 蒙阴县| 彭州市| 宜宾县| 彭州市| 罗山县| 七台河市| 沾化县| 吕梁市| 内黄县| 民丰县| 资阳市| 汪清县| 五指山市| 滨州市| 平昌县| 高密市| 柳林县| 高邮市| 潮安县| 临清市| 精河县| 阿尔山市| 广饶县| 庆城县| 永昌县| 津南区| 探索| 天镇县| 苍南县| 丰台区| 高雄县| 邯郸市| 神木县| 宜君县| 定安县| 鞍山市| 年辖:市辖区|