栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

父组件调用子组件方法(刷新页面)——2022-06-28

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

父组件调用子组件方法(刷新页面)——2022-06-28

需求:页面进行一些操作后(新增/编辑/修改状态等),需要刷新页面。但页面渲染的方法是定义在tableList组件内部的,操作按钮及一些弹框则是在父组件。就需要从父组件调用子组件请求页面刷新的方法,如图。

 解决方式

子组件

引入useImperativeHandle,forwardRef

把请求页面的方法重写在useImperativeHandle回调里面。

  useImperativeHandle(ref, () => ({
    renderTable: (pagination, queryParam, activeKey) => {
      function getUserStatus() {
        let user_status = 1;
        if (activeKey == 'tab1') {
          user_status = 1;
        }
        if (activeKey == 'tab2') {
          user_status = 0;
        }
        if (props.deletable) {
          user_status = -1;
        }
        if (props.recycleBin) {
          user_status = -1;
        }
        return user_status;
      }
      const tableParam = {
        jsonData: {
          currentwhere: queryParam.length ? JSON.stringify(queryParam) : [],
          ...pagination,
          sorting: 'user_guid',
          user_status: getUserStatus(),
          sortdir: 'asc',
          user_status: getUserStatus(),
        },
      };
      tabCount(tableParam).then((tableCount) => {
        setTabsData(() => {
          return tableCount.data;
        });
      });
      getUserMgtUserList(tableParam).then((res) => {
        if (res) {
          setTotalCount(() => {
            return res.data?.totalRows || 0;
          });
          setTableData(() => {
            return res.data?.list || [];
          });
        }
      });
    },
  }));

注:参数ref一定要写,如图。

最后,导出组件时用forwardRef包裹,如图。

父组件

给子组件加上ref

      {
          setActiveKey(tab);
        }}
      />

 最后在操作完成后通过ref直接调用子组件方法

tableRef.current.renderTable(pagination, queryParam, activeKey);

 至此,就能实现刷新效果了

但此问题还需优化,希望能找到更优的方式

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号