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

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

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

react-redux的connect與React.forwardRef結合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;
}

解決辦法

方法一:調用forwardRef返回值中的render方法 

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

方法二:connect第4個參數(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插件,導致被包裹的子組件useffect失效。

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

解決方法

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

其余部分用法不變。

  • 父組件:

  • 子組件:

總結

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

相關文章

  • React快速入門教程

    React快速入門教程

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

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

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

    淺談React Native Flexbox布局(小結)

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

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

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

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

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

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

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

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

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

    React組件的應用介紹

    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)劣勢示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React構建簡潔強大可擴展的前端項目架構

    React構建簡潔強大可擴展的前端項目架構

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

最新評論

荣成市| 全州县| 南丰县| 达拉特旗| 玉田县| 德化县| 中宁县| 德庆县| 徐水县| 麻城市| 通江县| 沐川县| 金昌市| 锦屏县| 子长县| 汉中市| 濮阳县| 麻江县| 桐柏县| 岑溪市| 涟水县| 台东市| 鄂州市| 图们市| 澳门| 静安区| 金门县| 禄劝| 西贡区| 铜山县| 射洪县| 河曲县| 遂川县| 高台县| 黔南| 新安县| 阿坝| 原平市| 海门市| 大丰市| 丰城市|