antd-react-mobile(踩坑记录)

1.按照官网步骤进行,

$ npm install -g create-react-app

# 注意:工具会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请尝试配置代理或使用

其他 npm registry。

$ create-react-app my-app

$ cd my-app

$ npm install antd-mobile --save

入口页面 (html 或 模板) 相关设置:

<script src="https://as.alipayobjects.com/g/component/fastclick/1.0.6/fastclick.js"></script>
<script>
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
if(!window.Promise) {
document.writeln('<script src="https://as.alipayobjects.com/g/component/es6-promise

/3.2.2/es6-promise.min.js"'+'>'+'<'+'/'+'script>');

}
</script>

 按需加载#

  • 引入 react-app-rewired 并修改 package.json 里的启动配置: 

 $ npm install react-app-rewired --save-dev

/* package.json */
"scripts": {
- "start": "react-scripts start",
+ "start": "react-app-rewired start",
- "build": "react-scripts build",
+ "build": "react-app-rewired build",
- "test": "react-scripts test --env=jsdom",
+ "test": "react-app-rewired test --env=jsdom",
}

 然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。

 $ npm install babel-plugin-import --save-dev

const { injectBabelPlugin } = require('react-app-rewired');
module.exports = function override(config, env) {
config = injectBabelPlugin(['import', { libraryName: 'antd-mobile', style: 'css' }], config);
return config;
};

所有步骤进行之后,恭喜你,踏入react-mobile第一坑,报错:

The "injectBabelPlugin" helper has been deprecated as of v2.0. You can use customize-cra plugins in replacement - https://github.com/arackaf/customize-cra#available-plugins 

  

原因: react-scripts 升级到 2.1.2 以后破坏了 react-app-rewired;然后 react-app-rewired 升级到 2.x 以后直接干掉了所有 helpers。react-scripts 升级到 2.1.2 以后破坏了 react-app-rewired;然后 react-app-rewired 升级到 2.x 以后直接干掉了所有 helpers。

 解决方法:把react-app-rewired 进行降级后可以了,即

$ yarn add react-app-rewired@2.0.2-next.0

 安装低版本的react-app-rewired以后,重新npm install,再运行yarn start,即可解决问题,实现antd按需引入

 

 2.使用antd-mobile的InputItem需要引入受控组件rc-form

npm install rc-form

但是安装过程中报错,查看官网,更新在9天前,应该是新版本兼容问题

解决办法: npm install rc-form@2.4.0 

 

3. antd-mobile的Menu添加路由

我们都知道,点击Menu的时候,希望链接更改,页面跳转

但是点击Menu的时候,无法使用

this.props.history.push(`/${menuId}`)

这时候,我们需要用到withRouter 

 将withRouter 引入

import { withRouter } from 'react-router-dom'

 再将组建用withRouter封存

export default withRouter(Nav)

就可以使用啦,具体用法直接百度

 

4.封装单选组建

关于初衷为什么要封装,是因为封装之后可以多次使用,而来不会挤在一个页面上,这样看起来很嘈杂,结构不够清晰

我封装的是不受控的组建,更改选择之后的值直接取自组建的state中,但是在表单中使用,却取不到这个自定义组件的值了

查询了官网之后,请看自定义表单控件https://ant.design/components/form-cn/#components-form-demo-customized-form-controls

使用到两个onchange之后的函数

handleOk=(e)=>{
let {formList}=this.props
formList.value=e[0]
this.triggerChange(...e);
}
triggerChange = (changedValue) => {
const onChange = this.props.onChange;
if (onChange) {
onChange(changedValue);
}
}

 即点击确定后,将值渲染到页面,然后再将值传出,之后我们在用rc-form的getFieldProps方法轻松加愉快了

但是我遇到的是Picker组件老是报错,说是里面的选项未找到···

排查了一下,发现optionData即单选的选项有时候会是undefined,这是为啥

原来我是先将总的数据传到单选组件,然后再在组件中循环遍历,加入label标签,这样的做法是不对的

应该现在顶层遍历数据,加好label,然后再加判断 optionData有值的时候再传入这个组件,这样就不会找不到选项数据了

 

5, antd-mobile的级联组件一点都不好用额,不满足公司需求

需求是这样的,点击修改,弹出省的选择,选择省之后,再根据选择的省级,加载市的数据,再根据市的选择加载区的数据

而不是一股脑儿的把数据传给你,这样数据会很庞大,(即使不庞大,公司给的接口是这样,我也没有办法,gucci~~)

既然如此,只能自己写了,虽然写的很烂,但是能用就好了

这里用到了 antd-mobile的Tag和Radio

做好的效果如图

 

 效果还是可以的,哈哈哈,选完之后,点击前面的tag,弹出相应的可修改,后面的置灰不可点击

具体代码请看https://github.com/copperfield013/react_datamobile/blob/master/src/components/CasePicker/index.js 

 

6.多选框或是抽屉,或是Menu的穿透问题 (兼容安卓和IOS)

作为移动端,为了用户体验,肯定会用到类似的一些弹出框,antd的组件虽然帮我们处理了一些,但是我发现ios上还是有穿透问题,即弹出内容后,背后的页面还是会随着指尖滑动而滑动,这是怎么肥四??

其实很简单,先定义一个阻止默认行为的函数:

bodyScroll=(e)=>{e.preventDefault();}

任何在多选框或是抽屉弹出时:

document.addEventListener('touchmove', this.bodyScroll, {passive: false})

当关闭内容时,再将设置恢复如初就ok了:

document.removeEventListener('touchmove', this.bodyScroll, {passive: false})

 

7.标题置顶Bug,这个不是antd-mobile的bug,但是也记录下

 收到的需求是这样的,向上滑动,滑到某一块,某一块的标题置顶

这么简单的小小功能用fixed做不就完了嘛,有什么难度 

 

 但是当我完成效果的时候,发现有一个小bug,当标题置顶切换的时候,出现了闪动,这是怎么回事??

 原来设置了fixed的元素脱离了文档流,使得获取判断的offsetTop的值不断的发生变化,进而会出现闪动

解决方法,fixed既然脱离了文档流,不就是少了一块嘛,手动加上便是

在每一模块下面添加一个高度与标题一样的空的div,设置display为none,

当滚动到特定高度时,标题置顶脱离文档流的同时,设置该模块下的空div的display:block,这就完事儿啦!!!

handleScroll=()=>{
const {scrollIds}=this.state
const scrollY=window.scrollY
const mainTopArr = [];
let k=0;
if(scrollIds){  //滑动锁定导航
for(let i=0;i<scrollIds.length;i++){
let node=document.getElementById(scrollIds[i])
if(node){
let top = Math.floor(node.offsetTop)    
mainTopArr.push(top);
}       
}
mainTopArr.sort((a,b)=> a-b)//排序
const fixedDiv=document.getElementsByClassName("fixedDiv")
for(let i=0;i<mainTopArr.length;i++){
if(scrollY>mainTopArr[i]){
k=i
for(let i=0;i<fixedDiv.length;i++){
fixedDiv[i].style.display="none"
}
fixedDiv[k].style.display="block"
}
if(scrollY<=10){
k=-1
for(let i=0;i<fixedDiv.length;i++){
fixedDiv[i].style.display="none"
}
}
}
}
const lis=document.getElementsByClassName("am-list-header")
if(lis && k>=0){
for(let i=0;i<lis.length;i++){
lis[i].style.position="static"
}
lis[k].style.position="fixed"
}
}

 

转载于:https://www.cnblogs.com/NatChen/p/10437151.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软私有云分享(R2)22 计算机配置文件与基础设置

计算机配置文件是完全为了裸金属安装准备的。所以如果不准备使用裸金属安装&#xff0c;硬件配置文件在SCVMM2012 R2中也可以不用配置。本章操作完全用图来表示&#xff08;其实我准备文字了&#xff0c;但是貌似文字丢了…………&#xff09;&#xff0c;创建该文件没什么注意…

14.PTD与的基址

0xC0300000就是页目录的基址。 随便找一个软件测试下 通过0xC0300000找到的物理页就是页目录表这个物理页即是页目录表本身也是页表页目录表是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表.如果我们要访问第N个PDE, 那么有如下公式&#xff1a;0xc03000…

多项式回归

在上一节所介绍的非线性回归分析&#xff0c;首先要求我们对回归方程的函数模型做出推断。尽管在一些特定的情况下我们能够比較easy地做到这一点,可是在很多实际问题上经常会令我们不知所措。依据高等数学知识我们知道&#xff0c;不论什么曲线能够近似地用多项式表示&#xff…

二级c语言无纸化三合一_学习攻略|计算机二级考试重点及注意事项

2020年全国计算机等级考试将于9月26日强势来袭&#xff0c;亲爱的你们准备好了吗&#xff1f;下面为大家准备了一些干货以及考试注意事项&#xff0c;快拿出小本本记下来吧。考试题型二级office考试题型1、选择题 20分(含公共基础知识部分10分)2、操作题 80分 (1)Word文档 30…

mongodb集群与分片的配置说明

mongodb集群与分片的配置说明 Shardingcluster介绍&#xff1a; 这是一种可以水平扩展的模式&#xff0c;在数据量很大时特给力&#xff0c;实际大规模应用一般会采用这种架构去构建monodb系统。 系统分为需要三种角色&#xff1a; Shard Server:mongod 实例&#xff0c;用于存…

使用VS2005进行负载测试

下面通过一个简单的例子来讲解VS2005是如何做负载测试的.1、 编写一个加法程序&#xff0c;其中编写一个加法方法&#xff0c;然后调用该方法。//程序源代码using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using Syst…

NodeJS开发环境配置

为什么80%的码农都做不了架构师&#xff1f;>>> 上链接&#xff5e; http://www.cnblogs.com/Irving/p/3634232.html 转载于:https://my.oschina.net/weiyi/blog/287177

一个平行四边形可以分成四个_将平行四边形分割成两个三角形还易变形么?(人教四下五单元三角形例2)...

最近&#xff0c;我学了三角形一课&#xff0c;研究了三角形的特性。课上我们拿出准备好的拼搭的三角形和平行四边形&#xff0c;动手拉一拉&#xff0c;结果发现三角形拉不动、平行四边形一拉就变形了。原来动动手也是研究数学呀&#xff0c;太有意思了&#xff01;这时&#…

配置redis三主三从

主从环境 centos7.6 redis4.0.1 主从192.168.181.139:6379192.168.181.136:6379192.168.181.136:6380192.168.181.137:6380192.168.181.137:6381192.168.181.139:6381集群实例配置 这里展示192.168.181.139:6379节点的&#xff0c;其他配置修改ip、端口号和文件名 bind 192.168…

tensorflow 模型小型化_模型小型化

实习终于结束了&#xff0c;现把实习期间做的基于人体姿态估计的模型小型化的工作做个总结。现在深度学习模型开始走向应用&#xff0c;因此我们需要把深度学习网络和模型部署到一些硬件上&#xff0c;而现有一些模型的参数量由于过大&#xff0c;会导致在一些硬件上的运行速度…

NoSQL系列:选择合适的数据库

NoSQL系列&#xff1a;选择合适的数据库 为什么使用NoSQL数据库&#xff1f; 阻抗失衡 关系模型和内存中的数据结构不匹配 采用更为方便的数据交互方式提升开发效率 待处理的数据量很大 数据量超过关系型数据库的承载能力 大集群的出现 在成本方面&#xff0c;集群中应用关系数…

史上最全搞怪WC标志(组图)--设计者太有才了。

转载于:https://www.cnblogs.com/onlyzq/archive/2007/12/22/1010318.html

下载安装webstrom及激活

太久没在新电脑上安装websrtom&#xff0c;又有点忘了咋激活。 一、安装 1.直接在浏览器搜索webstrom&#xff0c;打开官网&#xff0c;直接点击download。如下图 2.打开安装包&#xff0c;开始安装&#xff0c;直接点击 next 3.选择安装路径&#xff08;安装在你想安装的位置&…

CentOS命令行安装配置KVM详细教程

系统为centos 6.4 64位 最小化安装 服务器为dell R720&#xff0c;所以网卡为em0&#xff0c;在vmware作为练习安装学习&#xff0c;同样可以&#xff0c;命令行不是为了显的牛B&#xff0c;而是不用考虑桌面兼容性和其他原因的影响一、查看是否支持虚拟化vmware开启方式虚拟化…

C#中如何得到Graphics对象

2019独角兽企业重金招聘Python工程师标准>>> 利用Graphics对象&#xff0c;我们可以绘制理想的UI。这里首先介绍C#中如何得到Graphics对象。 /如何得到Graphics对象 1. Control.CreateGraphics();直接通过Control类的公开方法获取。可以是Form&#xff0c;基础控件&…

mysql 5.5 创建用户_MySQL5.5以上版本添加用户

MySQL数据库在5.5以后的版本对添加用户的操作进行了改版&#xff0c;已经不能使用原有的添加语法操作。MySQL数据库5.6版本变更&#xff1a;在数据库用户这一块&#xff0c;为了数据安全&#xff0c;5.6版本不在允许root用户通过insert语句对user表进行添加用户如图报错语法貌似…

linux和windows双系统互拷文件乱码问题

2019独角兽企业重金招聘Python工程师标准>>> 如果你需要在linux下面用到windows下的文件&#xff0c;拷贝上去后经常发现中文显示乱码。。原因是Windows中默认的文件格式是 GBK(gb2312)&#xff0c;而Linux一般都是UTF-8。比较繁琐的方法是在windows下用程序把内容转…

LOJ2195 旅行

LOJ2195 旅行 题目描述S 国有 N 个城市&#xff0c;编号从 1 到 N。城市间用 N-1 条双向道路连接&#xff0c;满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教&#xff0c;如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便&#xff0c;我们用不…

System variables, logging and the Execute SQL Task...(zz)

原文地址http://sqljunkies.com/WebLog/knight_reign/archive/2005/02/27/8187.aspxHeres something useful you can do with system variables and the SQL Task. Logging in SSIS is more flexible and there are more options for logging destinations and formats then wi…

jenkins maven没有使用全局设置文件地址_Jenkins手把手图文教程「基于Jenkins 2.164.1」...

一、下载前往https://jenkins.io/download/ &#xff0c;按需下载。如用于生产&#xff0c;建议下载Long-term Support (LTS) 版本&#xff0c;这样能够获得相对长期的维护&#xff1b;如想体验最新的功能&#xff0c;可尝试 Weekly 版本。可以直接下载特定系统专属的版本&…