丰田项目踩坑手记(REACT)

路由配置的时候:要引入hash路由不是browswer那个

  • 路由参考网址:react-guide.github.io/react-route…
  • 路由网址:reacttraining.com/react-route…

步骤:

  • 1、新建路由组件文件在文件里面引入react路由
function BasicExample(){return (<Router><Switch><Route path='/' exact={true} component={Home}/><Route path='/home'  component={Home}/><Route path='/sell' component={Sell}/><Route path="/buy" exact={true} component={Buy}/><Route path="/message" exact={true} component={Message}/><Route path="/saler" exact={true} component={Saler}/><Route path="/brand" exact={true} component={Brands}/><Route path="/message2" exact={true} component={Message2}/><Route path="/cardetail" exact={true} component={Detail}/></Switch></Router>)
}
export default BasicExample;

带参数路由跳转(在url上面拼参数),两种方式选一种

有两种方法:

  • 1、直接用Link(相当于a) 写法:<Link to={/xxx/${xxx}}>

  • 2、写点击事件:

import { Link } from "react-router-dom";
jump(i){this.props.history.push(`/ucar/${i}`);}

exact是精确匹配的意思 path是路径要和导航的navLink(是navLink)一致

  • 2、头部导航组件里面写要跳转的路径(“/”或者“/home”或者。。。。。)
 头部组件引入:import {NavLink} from "react-router-dom"<div><ul className="tabGroup"><li><NavLink to="/home" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>首页</NavLink></li><li><NavLink to="/sell" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>安心买车</NavLink></li><li><NavLink to="/buy" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>安心卖车</NavLink></li><li><NavLink to="/brand" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>安心品牌</NavLink></li><li><NavLink to="/message" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>安心资讯</NavLink></li><li><NavLink to="/saler" activeClassName="hover" style={{color:"#000",fontSize:"18px"}}>安心经销商</NavLink></li></ul></div>

import { HashRouter as Router, Route, Link, Switch } from "react-router-dom";

难点2:换页面回填

1、利用路由的方法:this.props.history.push({pathname: '/sell',query: { param:item,which}});

2、在需要拿到参数的页面获取参数(this.props.location.query.param)

难点3:setState 不能立刻拿到数据

  • react可以参考:huziketang.mangojuice.top/books/react… 这个网站的讲解

setState接受两个参数:对象参数和回调函数作为参数

  handleClickOnLikeButton () {this.setState((prevState) => {return { count: 0 }})this.setState((prevState) => {return { count: prevState.count + 1 } // 上一个 setState 的返回是 count 为 0,当前返回 1})this.setState((prevState) => {return { count: prevState.count + 2 } // 上一个 setState 的返回是 count 为 1,当前返回 3})// 最后的结果是 this.state.count 为 3}
  • 上面我们进行了三次 setState,但是实际上组件只会重新渲染一次,而不是三次;这是因为在 React.js 内部会把 JavaScript 事件循环中的消息队列的同一个消息中的 setState 都进行合并以后再重新渲染组件。

  • 深层的原理并不需要过多纠结,你只需要记住的是:在使用 React.js 的时候,并不需要担心多次进行 setState 会带来性能问题。

地图插件的引用(注意写样式的时候不能写 *,这样会影响全局)

  • 地图插件的api(lbsyun.baidu.com/jsdemo.htm#…)
  • 1、百度的先要自己注册ak(我的ak:g1hboIUNSzb8fCwC0DsemlKqmrkKiLos)
  • 2、引入的时候在全局引入
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=g1hboIUNSzb8fCwC0DsemlKqmrkKiLos"></script><link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css"/>
  • 3、在componnetDidmount里面使用
this.maps = new BMap.Map("allmap");var point = new BMap.Point(116.404, 39.915);  // 创建点坐标this.maps.centerAndZoom(point, 15);

finIndex的用法

es6 :findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。

pc端选车空间和选城市空间的时候,要引入pc版本的

pc轮播图的写法

.banner {position: relative;
}.swiper-container{width: 100%;margin: 0 auto;overflow: hidden;position: relative;}
.banner .swiper-container .swiper-slide{width: 100%;height: 440px;overflow: hidden;
}
.banner .swiper-slide  img{display:block;width: 1920px;height: 440px;position: relative;left: 50%;margin-left: -960px;
}

react 选项卡的写法(涉及到动态样式绑定)

  • 直接用样式写
 handleShow =(index)=>{this.setState({currentIndex:index})};<div className="container"><Head/><div className="tab"><div  onClick={this.handleShow.bind(this,0)}  className={this.state.currentIndex===0?'activ':""}>品牌发展</div><div  onClick={this.handleShow.bind(this,1)} className={this.state.currentIndex===1?'activ':""}>品牌业务</div></div><img src={pp1} alt="" style={{display:(this.state.currentIndex===0)?"block":"none"}}/><img src={pp2} alt="" style={{display:(this.state.currentIndex===1)?"block":"none"}}/></div>)

获取数据拼接字符串的时候去要把所有的变量打印出来看看,然后再拼

let url=`http://zt.taoche.com/zt/api/GetCarList/GetCarData?25748231628663465%27%27&PARAM_SuperiorId=13&PARAM_PageSize=8${this.PARAM_PageIndex?('&PARAM_PageIndex=' + this.PARAM_PageIndex):''}${this.PARAM_CurrentCityID?('&PARAM_CurrentCityID='+this.PARAM_CurrentCityID):''}${this.PARAM_OrderBy ? ('&PARAM_OrderBy=' + this.PARAM_OrderBy) : ""}${this.PARAM_IsDESC===1||this.PARAM_IsDESC===0 ? ('&PARAM_IsDESC=' + this.PARAM_IsDESC) : ""}${this.PARAM_PriceLower?('&PARAM_PriceLower='+this.PARAM_PriceLower):""}${this.PARAM_PriceHigh?('&PARAM_PriceHigh='+this.PARAM_PriceHigh):''}${this.PARAM_AgeLower?('&PARAM_AgeLower='+ this.PARAM_AgeLower):""}${this.PARAM_AgeHigh?('&PARAM_AgeHigh='+this.PARAM_AgeHigh):""}${this.PARAM_DrivingMileageLower?('&PARAM_DrivingMileageLower='+this.PARAM_DrivingMileageLower):""}${this.PARAM_DrivingMileageHigh?('&PARAM_DrivingMileageHigh='+this.PARAM_DrivingMileageHigh):''}${this.PARAM_CarSerial?('&PARAM_CarSerial='+this.PARAM_CarSerial):''}${this.PARAM_MainBrand?('&PARAM_MainBrand='+this.PARAM_MainBrand):''}&PARAM_PictureCount=1&PARAM_RequestSource=6&PARAM_UcarStatus=1&PARAM_ShowColumn=CarDetailUrl,CarImageURL,cartitle,BuyCarYearMonth,DriveMiliDesc,DisplayPrice,carreferprice,ucarserialnumber,buycardate,ucarid,producerid,datacount`;

iframe嵌入外部网页

<iframe  src="http://www.taoche.com/Inc/taocheblock/ToyotaNewsList.shtml" frameBorder="no" border="0"  scrolling="no" align="center" height="2500" width="1200"></iframe>

如果是跨域请求,在请求的时候一定是要写callback,与后台的一致

 $.ajax({url: `//event.huidu.taoche.com/UCarBasicInfo/GetStatus?ucarid=${this.props.match.params.id}`,type: "GET",dataType: 'jsonp',jsonp: 'callBack',success: (res) => {if (res.Result) {this.setState({carinfo: res.Data})}},error: (err) => {console.log(err);}});

三级联选的时候,首先把第一级过滤出来,然后选完第一级实时更新,第二级Select的value默认置为第一个,然后在每次onChange的时候把value的值重置为当前选择的,第三级的也是根据上一级的选择的过滤出来

对于变量:页面展示用到了就设置状态,没用到直接就this.xxx,setState太多会影响性能,因为setState的时候会默认作出很多处理

丰田项目线上地址:event.taoche.com/toyota/inde…

react路由的官方文档:react-guide.github.io/react-route…

地图api:(lbsyun.baidu.com/jsdemo.htm#…

转载于:https://juejin.im/post/5c1071f56fb9a049ee804f23

丰田项目踩坑手记(REACT)相关推荐

  1. java 做项目踩坑,web项目踩坑过程

    sql函数设计: 一开始本来是直接用Java的jdbc直接传输操作语句的.但后来学了存储过程发现存储过程可以提高不少的效率.就重构了自己对数据库的操作代码.包括:开启,查找,修改,关闭. 开启:直接使 ...

  2. 配合Opencv2.4.9,CMake3.12.1和VS2010在win10下构建项目踩坑记录

    配合Opencv3,CMake和VS2010在win10下构建项目踩坑记录 参考https://blog.csdn.net/qq_26623659/article/details/78322782 博 ...

  3. html2canvas图片的文字偏移,html2canvas在Vue项目踩坑-生成图片偏移不完整

    背景 最近做一个Vue项目需求是用户长按保存图片,页面的数据是根据不同id动态生成的,页面渲染完生成内容图片让用户长按保存的时候,把整个页面都保存起来. 在项目遇到的坑是图片能生成,可是生成的图片总是 ...

  4. cxfreeze打包python项目踩坑笔记

    先说结论 推荐使用cxfreeze-quickstart命令来手动配置打包参数. 若项目包含有ctypes加载的dll文件,需要在setup.py的buildOptions内传入,include_fi ...

  5. android sharesdk qq授权失败,项目踩坑之Share SDK指定平台分享

    现在很多应用都包含了社会化分享的功能,最近由于项目需要,所以亲自去踩了踩Mob社会化分享的坑.接下来就介绍一下怎样集成Share SDK吧!!! 一.集成ShareSDK的步骤: 1)注册ShareS ...

  6. 集成Emscripten+wasm至React项目踩坑记录

    前言 需求是有一个C++写的工具包(负责大规模的数据运算). 需要用emscripten是把C/C++编译成WebAssembly,便于在JS环境之后执行. 最终在React项目中调用工具包. 数据类 ...

  7. html2canvas在Vue项目踩坑-生成图片偏移不完整

    背景 最近做一个Vue项目需求是用户长按保存图片,页面的数据是根据不同id动态生成的,页面渲染完生成内容图片让用户长按保存的时候,把整个页面都保存起来. 在项目遇到的坑是图片能生成,可是生成的图片总是 ...

  8. vuecli4+vant移动端响应式项目踩坑记录

    文章目录 关键词 参考链接 一. 使用vue/cli4 二. 使用vant 三. 加入响应式布局 1. rem适配插件 2. PostCSS配置 四. 图标库:封装svg图标组件 1. 建立如下目录结 ...

  9. Eclipse转IDEA开发java项目spring+mybaits项目踩坑记录

    久了不用一个东西总有遗忘,记录是你快速找回状态之本.今天将原来eclipse写的spring+mybatis Demo在 idea上跑起来,花了不少时间.这里将坑记录下: 一.IDEA创建项目 1. ...

最新文章

  1. 你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
  2. springboot接口签名统一效验_Python如何接入开放平台?签名验签、加密解密、授权认证测试实战...
  3. bbs mysql_简单BBS程序(需MySQL支持)
  4. dueros模拟测试没有请求后台_DuerOS开放平台
  5. python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...
  6. java通信rs485_基于VB6.0与485仪表的Modbus RTU通信(含代码)
  7. idea超炫的自定义模板
  8. 2元一次方程计算机求解,在Excel中求解二元一次方程组
  9. edem合成运动教程
  10. 着色缓存器_新的缓存着色器预处理器(实验性)可加快构建速度
  11. 阿里code代码提交git命令总结
  12. ?username=王二麻子age=18转换成对象?
  13. Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)
  14. SWIFT电文类型及格式
  15. 《部落冲突:皇室战争》——一款不能错过的游戏!
  16. js实现查找两个相同字符串之间的最长子字符串长度
  17. linux打包解压命令
  18. 风险管理_cissp
  19. python中用于生成随机数的函数的简单总结
  20. 华为手撕代码c语言题目,想去面试?这10道最高频的手撕代码题都会了吗?

热门文章

  1. 为什么不建议使用ON DUPLICATE KEY UPDATE
  2. [harden] 使用easyctl加固操作系统
  3. acs cisco 查看log_设备维护中心-基于Cisco Secure ACS的网络设备统一认证及登录日志查询系统...
  4. AI帮60年代老技术解决面料数字化难题,王华民团队新方法只需3分钟数据采集复刻面料真实效果...
  5. android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  6. 0x003B8027 处有未经处理的异常(在*.exe 中): 0xC00000FD: Stack overflow (参数: 0x00000000, 0x00252000)
  7. LNMP架构介绍及原理流程
  8. 网页嵌入播放器,并且可以控制播放列表的
  9. 利用Nodejs实现爬虫
  10. Netty SSL安全配置