Reace

React特点:jsx语法;单向数据流;组件系统化;虚拟dom

jsx语法:——数据绑定——

—内容绑定——<div>{表达式}</div>

—属性绑定——<div 属性={表达式}></div>

—样式绑定——<div style={{样式:表达式}}></div>

—事件绑定——<div onClick={函数}></div>

状态:

在constructor方法中用this.state定义组件状态

用this.setState()更改组件状态

组件:

创建组件(一个js或.jsx文件就是一个组件)

组件通信:

父传子

——父组件在子组建身上通过自定义属性传值给子组建,子组件内部通过this.props接收

子传父

——父组件在子组件身上通过自定义属性传值给子组件,子组件内部通过this.props拿到该函数,调用函数完成传值

跨组件—

—创建一个Context(通信上下文)

—外层组件通过Context.Provider的value属性传值

—内层组件通过this.context接收值

兄弟组件通信

——通过events来传值

——一个组件监听事件

——另一个组件触发事件

组件的声明周期

//组件实例化期——只会调用一次
componentDidMount //发起网络请求 创建定时器,监听事件   
render
ComponentWillMount

//更新期的方法——会在每次组件更新时执行
componentWillUpdate
render
componentDidUpdate
//——(不能在更新期方法中调用setState())——

//卸载期的方法——释放资源
componentWillUnmount //释放资源(取消网络请求,销毁定时器,移除监听事件)

路由

安装react-router-dom插件

react-router-dom提供了BrowserRouter,HashRouter两个路由管理器组件

react-router-dom提供了Route,Switch,Redirect路由组件—所有路由组件必须嵌套在路由管理器组件内部

import {BrowserRouter as Router,Route,Switch,Redirect} from 'react-router-dom'

Switch作用:内部的多个路由,从上往下匹配,第一个匹配到的路由渲染对应的组件,其他路由不再匹配

属性-exact- 精确匹配(浏览器地址栏的地址必须和路由地址完全一样) 当一级路由下有二级路由时不能添加exact否则二级路由不显示

在定义二级路规则时,哪个页面需要二级路由,就将路由规则放到哪个页面;

跳路由的方式:

声明式导航——内部自带

Link

NavLink

编程式导航——通过写js代码实现跳路由,只能在二级页面写,不能写在tabbar组件中

props.history.push()  //跳路由
props.location  //获取路由参数
props.match  //获取路由参数
props.history.replace()
props.history.go()  //前进 or 后退
props.history.goBack() //后退
props.history.goForward() //前进

跳路由Link与NavLink的区别

使用NavLink会自动维护active类的添加/移除—可以用到点击事件的高亮;Link则不会。

千万不要将NavLink换成a标签 (a标签不会自动维护active类的添加/移除 而且会使页面刷新)

路由传参

//动态路由传参——刷新页面,参数数据不会丢失——参数会在地址栏(可加密)
<Route path="/detail/:id" component={Detail}></Route>
//组件内,通过props.match.params.xxx接受传递过来的参数

//通过query传参——刷新页面,参数数据会丢失
//只在条路有的同时可以传参
{pathname:"/地址",query:{属性}}
//通过props.location.query.xxx接受传来的参数

//通过state传参——刷新页面,参数数据不会丢失,传的参数是加密的,但是通过手动该地址跳路由无法传参
{pathname:"/地址",state:{属性}}
//通过 props.locations.state.xxx

未完……

上一篇:vue 取props的值


下一篇:父组件传值子组件,子组件传值父组件