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,一经查实,立即删除!

相关文章

启动Eclipse 弹出“Failed to load the JNI shared library”错误的解决方法

原因1&#xff1a;eclipse的版本与jre或者jdk版本不一致 对策&#xff1a;要么两者都安装64位的&#xff0c;要么都安两个是32位一个是64位。 原因2&#xff1a;给定目录下jvm.dll不存在 对策&#xff1a;&#xff08;1&#xff09;重新安装jre或者jdk并配置好环境变量。&#…

路径的应用(3)

如果与MC2同级的还有一个影片剪辑MC3,则想修改MC3,的透明度&#xff0c;用如下方法&#xff1a;on(release){_parent.MC3._alpha0;}如果MC3下还有一个影片剪辑MC4&#xff0c;想修改MC4的透明度则用如下方法&#xff1a;on(release){_parent.MC3.MC4._alpha0;}转载于:https://w…

php.ini在哪里 微赞_虚拟主机php.ini在哪?怎么查看php.ini在哪

虚拟主机php.ini在哪&#xff1f;怎么查看php.ini在哪&#xff1f;相信很多人都会有这样的疑问&#xff0c;下面聚名网为你详解一下以上问题。虚拟主机php.ini在哪&#xff1f;虚拟主机php.ini文件一般放置在文件管理器的“others”文件夹中。php.ini文件控制了PHP很多方面的性…

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

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

总结了下自己的几个典型行为

所有电器都不看说明书&#xff1b;尽量使用自助办理业务&#xff1b;使用最多的称呼是同学&#xff1b;喜欢玩小孩但不喜欢生小孩&#xff1b;拥有一种奇怪的固执&#xff1b;熟人面前是话癖&#xff0c;生人面前一言不发&#xff1b;认幽默感是做人的根本&#xff1b;认为如果…

14.PTD与的基址

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

多项式回归

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

Spring - shortcuts

How to use CSS, JavaScript and Images in Spring MVC Web App https://www.udemy.com/spring-hibernate-tutorial/learn/v4/t/lecture/5608584?start0 Deploying To Tomcat using WAR files https://www.udemy.com/spring-hibernate-tutorial/learn/v4/t/lecture/5633776?s…

.net中前台javascript与后台c#函数相互调用

1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数? 问题1答案如下&#xff1a; javaScript函数中执行C#代码中的函数&#xff1a; 方法一&#xff1a;1、首先建立一个按钮&#xff0c;…

二级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…

vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求

问题背景&#xff1a;有时候一些列表会有一些跳转的需求&#xff0c;比如跳到详情页、或者是其他相关的页面&#xff08;比如跳到用户列表去查看用户的相关信息&#xff09;等&#xff0c;此时再返回列表页&#xff0c;列表页会刷新重置。目前需求就是需要改成如下情况&#xf…

轮廓检测_轮廓检测| Richer Convolutional Features | CVPR | 2017

0 概述论文名称&#xff1a;“Richer Convolutional Features for Edge Detection”论文链接&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Liu_Richer_Convolutional_Features_CVPR_2017_paper.pdf缩写&#xff1a;RCF这一篇文论在我看来&#xff0c;是…

NodeJS开发环境配置

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

python各种类型转换-int,str,char,float,ord,hex,oct等

int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返…

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

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

Java中利用MessageFormat对象实现类似C# string.Format方法格式化

我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...)&#xff0c;来格式化字符串&#xff0c;特别是拼接字符的时候&#xff0c;这种方式使得代码更为直观清楚。 最近使用java时候却java的string.Format与c#重点string.Fo…

配置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…

加个属性让div成纵向横向无缝滚动(支持IE和FF)

<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"> <head> <title>无缝div(纵向,横向滚动)(s…