一、react脚手架安装步骤
1 | $ cnpm install -g create-react-app //全局安装react |
二、react添加取消类名方式
1. 添加取消类名
思路:现在上面定义一个变量,例如:isShowSearchBar:true,然后给你要点击的那个东西添加onClick={}事件,然后根据变量的true和false来决定添加取消类名,
1 | className={this.state.isShowSearchBar? "weui-search-bar": "weui-search-bar weui- |
2. tab切换形式
思路:先定义一个变量为0,以索引的形式切换,把点击事件写给你要点击的东西,当你点击的时候,把索引传给函数,通过函数事件把index赋给你定义的变量,然后在下面根据你的变量等于索引的三元表达式形式,添加类名,例子如下:
1 | class Xfooter extends Component { |
三、文本框聚焦
思路:先给你要聚焦的文本框绑定ref=“变量名”,然后在你的点击事件里面写,this.refs.变量名.focus();既可聚焦
1 | ================== |
四、获取文本框的value方法
思路:先给文本框绑定onChange事件,记住要用大括号的形式{},在上面的事件函数里面传个e,就直接获取e.target.value,然后再上面this.state里面定义一个变量,例如:searchValue:””,然后通过this.setState({})的方法把值赋给那个变量既可。
1 | ==============定义阶段=============== |
五、函数式编程
1 | 思路:能在虚拟dom里任意一地方放{{}}编写逻辑,会在虚拟Dom里渲染return的数据 |
1 | 步骤:1.先在上面定义一个数组 |
六、路由
1. 路由的起步
- 下载路由模块
1 | npm install react-router-dom |
- 在index.js引入
1 | import { BrowserRouter as Router, Route, Link } from "react-router-dom"; |
- 在index.js外面包上
<Router></Router>
1 | ReactDOM.render( |
2. 路由的跳转实现及步骤
- 建议在index.js页面引入哈希路由
1 | import { HashRouter as Router, Route } from 'react-router-dom' |
- 在ReactDOM.render下面写上
1 | ReactDOM.render( |
- 然后在home页面引入路有插件和小组件
1 | import { Route } from 'react-router-dom' |
- 根据路径判断调到那个路由
1 | <Route path="/home/wechat" component={Wechat} /> |
- 去Xfooter页面引入路由组件
1 | import { Link } from 'react-router-dom' |
1 | 把`a`标签改为`Link`,然后在里面写`to{/home/${item.href}}` |
1 | <Link to={`/home/${item.href}`}></Link> |
3. 设置默认路由
- 进入页面引入时加
Redirect
1 | import { HashRouter as Router, Route , Redirect ,Switch} from 'react-router-dom' |
- 下面写默认路由
1 | ReactDOM.render( |
七、redux组件通信
1 | npm install --save react-redux |
- 在index.js引入
1 | //redux |
- 创建仓库
1 | const store = createStore(function(state={ |
- 在下面用
Provider
包住
1 | ReactDOM.render( |
- 在你要用redux的仓库引入
1 | import { connect} from 'react-redux'; |
- 在最下面写
1 | export default connect((state)=>{ |
- 在index.js里面接收回你改的东西
1 | const store = createStore(function(state={ |
九、组件
里面包含html,css,js
react是把所有的html,css都放进js文件里面
- react定义组件,先创建
xxx.js
,在文件里面引入react
模块
1 | import React, { Component } from 'react'; |
- 所有组件继承于
Component
1 | class 组件名字 extends Component {} |
- 导出组件
1 | export default App; |
1 | 使用redux时,记住一定要把东西在仓库就先return出来,要不然外边拿不到 |
3. react路由设置、及重定向
1 | 路由冲定向时会报错,记得要引入 **import { HashRouter as Router, Route , Redirect ,Switch} from 'react-router-dom' |
4. redux修改仓库中数组的某一项、实现联动效果
1 | 如果你要是想通过点击事件触发仓库中的某一个值,是数组的情况下,你需要遍历仓库中的数组,把你要变得索引传过来,然后让其他的不变,例如: |
6. 路由嵌套问题
在哪个页面的二级路由,就写在哪个页面,例如:你要在首页写二级路由,你就把二级路由写在首页,
然后一级路由会基于你二级路由跳转的路径跳转,所以你要加个斜杠
/
在一级路由那里/${item.href}
1 | ===================二级路由home写法===================== |
7. 导航高亮刷新保持
window.location.hash.slice(2)
参考链接
1 | switch (window.location.hash.slice(2)) { |
9.邮箱验证码步骤及思路
思路:当你点击发送验证码时,发起ajax请求,后端生成验证码,发送到你上面
注册
的邮箱,后端缓存验证码,留到用户拿到验证码输入时进行比对,正确,则插入数据库,失败不插入
- 先下载模块
nodemailer
1 | cnpm install nodemailer --save-dev |
- 引入模块
1 | const nodemailer = require('nodemailer'); //引入模块 |
- 接收前端路由处
1 | var express = require('express'); |
10.路由获取方法
思路:在最大的组件获取到路由,通过props方法传到需要的子组件去
备注:因为小组件拿不到props
1 | var url = this.props.loction.pathname |
11.路由跳转的两种方式
备注:如果不是需要注册登录那种判断,用Link即可
- Link方式
1 | import { Link } from 'react-router-dom' |
- withRouter 方式
应用场景说明:
1 | <Route exact path="/Home" component={Home}/> |
1 | import { withRouter } from 'react-router-dom' |
稳稳的写法
1 | import { withRouter } from 'react-router-dom' |
12.参数的获取
1 | 使用`this.props.match.params.xxx` 可以获取到当前路由的参数 |
13.react cookie
用法
- 先下载模块
1 | cnpm install react-cookie --save-dev |
- 引入
1 | import cookie from 'react-cookies' |
- 存入
cookie
1 | cookie.save('userId', this.state.value); |
- 删除
cookie
1 | cookie.remove('userId') |
- 获取
cookie
1 | select([regex]) |
14.React的Sass配置
- 先下载
1 | npm install sass-loader node-sass --save-dev |
- 找到配置文件,
1 | node_modules/react-scripts/config/webpack.config.dev.js |
- 找到module下的rules,然后找到最后一个配置,修改成如下的样子
1 | { |
15.loading效果
veu、react通用
- 下载、引入axios
1 | ========react========= |
- 下载引入antd-mobile
1 | =========react========== |
- 引入样式
1 | 备注:样式在node-modues里面,可自行找路径,或复制过来 |
- 在index.js写如下代码
1 | =============请求之前loading============== |
- 在vue的main.js中
1 | ============请求之前loading============== |
16.回退goback()
用法
1 | import {createHashHistory} from 'history';//组件引入 |
切换路由回退顶部
1 | class ScrollToTop extends Component { |