关于typescript + react +antd 的Function components cannot have string refs. We recommend using useRef()

关于typescript + react +antd 的Function components cannot have string refs. We recommend using useRef()问题

我这里是一个走马灯 想要调用 他的prev ,next 方法可是按照网上的说法用this.ref.(自己取的名字).prev();就会报出 Function components cannot have string refs. We recommend using useRef()这个问题。我百思不得其解。百度的方法都是让我去掉ref 但是我想要调用这个走马灯的方法就不能去掉,于是在我不断修改发现后终于得到了下面的写法。

//头部要引用useRef
import React, { useState, useEffect, useRef} from 'react';
const SelfCarousel: React.FC<{ children: any[] }> = props => {
  const carouselEL = useRef<Carousel>(null);
  return (
    <div className={style.dd}>
      <div className={style.bannerBox}>
        <img
          src={`/images/left.png`}
          alt=""
          className={style.imgStyle_left}
          onClick={() => {
            carouselEL.current!.prev();
          }}
        />
        <Carousel dots={false} ref={carouselEL}>
          {props.children.map((itemE: any, m: any) => (
            <div className={style.contentStyle}>
              {itemE.map((itemM: any, j: any) => (
                <div className={style.setContent}>
                  <div className={style.t}> {itemM.catalogName}</div>
                  <div className={style.p}>简介示例:</div>
                  <div className={style.c}>{itemM.catalogName}</div>
                  <AssetsSum catalogId={itemM.catalogId} />
                  <Link to={`/assetsDirectory?c=${itemM.catalogId}`} target="_blank">
                    <div className={style.x}>查看详情</div>
                  </Link>
                </div>
              ))}
            </div>
          ))}
        </Carousel>
        <img
          src={`/images/right.png`}
          alt=""
          className={style.imgStyle_right}
          onClick={() => {
            carouselEL.current!.next();
          }}
        />
      </div>
    </div>
  );
};

下面是他的引用

 const renderItems = (items: any[]) => {
    if(Array.isArray(items) && items.length){ 
      items = items.map((item,h) =>({
        ...item,
        children: formatArray(item.children),
      }));
      return (
        <div className={style.wrap}>
          {  
            items.map((c, i) => (
              <div className={style.dl} key={i}>
                {/* 整体box */}
               <div className={style.main}>
                  {/* 左边内容 */}
                  <Row>
                    <Col span={6}>
                    <div className={style.dt}>
                        <div className={style.tit}>{c.catalogName}</div>
                        <img className={style.ico} src={`/images/img-assets-${(i+1)%3==0?3:(i+1)%3}.png`} alt="" />
                          <AssetsNum catalogId={c.catalogId} />
                    </div>
                    </Col>
                    {/* 右边内容 */}
                    <Col>
                      <SelfCarousel children={c.children} />
                    </Col>
                  </Row>      
                </div>  
              </div>
            ))
          }
        </div>
      ) 
    }
    return null;
  }
  return renderItems(catalogs);
}

总结一下就是说你使用的ref不能用在无状态的组件中,所以你要自己定义一个useRef然后调用自己的定义的组件来获得。再调用对应的方法就可以了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值