当前位置: 首页 > article >正文

ant mobile design组件库的PickerView组件不能滑动

问题

PickerView组件在开发环境可滑动,在测试环境不可滑动

  • 正常开发环境是这样正常显示,并且可滑动的
    在这里插入图片描述

  • 发到测试环境后,变成了这样,并且只有中间那列可滑动,两边的都不能滑动,而且还会报警告
    在这里插入图片描述

  • 封装的组件代码如下

// 日期选择组件
const CustomDatePickerView: FC<any> = ({
  customizeTab,
  setCustomizeTime,
  customizeTime
}) => {

  const [value, setValue] = useState<number[]>(
    transformDateToArray(customizeTime[customizeTab])
  );


  const [days, setDays] = useState<any>([]);

  useEffect(() => {
    // 在组件加载时设置初始值
    console.log(111, customizeTime, customizeTab, value[0], value[2]);
    updateDays(value[0], value[2]); // 设置天数列
    // sessionStorage.setItem('isFirst', '1');
  }, []);

  useEffect(() => {

    setValue(transformDateToArray(customizeTime[customizeTab]));
  }, [customizeTab]);

  const months = [
    { label: 'January', value: 0 },
    { label: 'February', value: 1 },
    { label: 'March', value: 2 },
    { label: 'April', value: 3 },
    { label: 'May', value: 4 },
    { label: 'June', value: 5 },
    { label: 'July', value: 6 },
    { label: 'August', value: 7 },
    { label: 'September', value: 8 },
    { label: 'October', value: 9 },
    { label: 'November', value: 10 },
    { label: 'December', value: 11 }
  ];

  const years = Array.from({ length: 100 }, (_, i) => ({
    label: `${dayjs().year() - 50 + i}`,
    value: dayjs().year() - 50 + i
  }));

  const updateDays = (month, year) => {
    const daysInMonth = dayjs(`${year}-${month + 1}`).daysInMonth();
    const newDays = Array.from({ length: daysInMonth }, (_, i) => ({
      label: `${i + 1}`,
      value: i + 1
    }));
    setDays(newDays);
  };

  const onChange = debounce(val => {

    const [selectedMonth, selectedDay, selectedYear] = val;

    if (selectedMonth !== value[0] || selectedYear !== value[2]) {
      // 动态更新天数列
      updateDays(selectedMonth, selectedYear);
    }

    // 确保日期选项在天数列更新时不越界
    const daysInSelectedMonth = dayjs(
      `${selectedYear}-${selectedMonth + 1}`
    ).daysInMonth();
    if (selectedDay > daysInSelectedMonth) {
      val[1] = daysInSelectedMonth;
    }


    setValue(val);

    customizeTime[customizeTab] = transformDate(
      dayjs(`${selectedYear}-${selectedMonth + 1}-${selectedDay}`)
    );

    setCustomizeTime([...customizeTime]);
    // }
  }, 500);


  return (
      <PickerView
        className="!bg-[#27292F]"
        columns={[months, days, years]}
        value={value}
        onChange={onChange}
        style={{ '--item-font-size': '20px' }}
      />
  );
};

最终发现可能导致的原因是在本地开发环境会触发两次useEffect,所以传入的columns应该没什么问题,而测试环境是只触发一次,打断点的时候发现days这个值不对
解决办法就是 加了一个days.length 的判断就可以了,

days.length && (
      <PickerView
        className="!bg-[#27292F]"
        columns={[months, days, years]}
        value={value}
        onChange={onChange}
        style={{ '--item-font-size': '20px' }}
      />
    )

http://www.kler.cn/a/292915.html

相关文章:

  • 网络远程操控
  • android dvr黑屏
  • stringUtils详细解释
  • 【MySQL】数据库表连接简明解释
  • JUC-locks锁
  • 字节跳动核心技术:TT推荐系统从0-1落地应用
  • 思科IP访问控制列表3
  • SpringBoot配置返回数据不存在null
  • JUnit 5和Mockito进行单元测试!
  • Redis配置
  • 计算机毕业设计推荐-基于python的电子图书馆数据可视化分析
  • Tensorflow实现深度学习8:猫狗识别
  • c++中析构函数是否一定要为虚函数
  • Markdown全兼容,MarkText打造专业文档新体验
  • 【数学建模】国赛论文模型的建立与求解写作指南
  • 前端希望Quasar
  • C# 迭代器
  • 可解释人工智能(XAI)领域的全面概述
  • 【Spring Boot 3】【Web】配置HTTPS
  • Aloudata CAN 发布:真正实现企业指标的管理、研发与消费一体化
  • Java 基础八股文
  • EmguCV学习笔记 VB.Net 9.3 移动检测类
  • 【补-网络安全】日常运维(二)终端端口占用排查
  • 10--基于kubernetes的redis-cluster部署
  • nvm详细安装使用教程和详细命令,以及提示” ‘nvm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件“处理办法
  • 4、Django Admin对自定义的计算字段进行排序