React

147 阅读3分钟

1.react的创建项目

$ cnpm install -g create-react-app
$ create-react-app my-app
$ cd my-app/
$ npm start


项目的架构:
    在index.js渲染react组件的页面
    

image.png

    在App.js里面写登录登录页和home页面
router.js静态路由,需要自己使用函数,去匹配
跨域:参考第11条
路由导航守卫:参考14条

知识点:数据的监听:类似watch,computed,的使用,redux

2.react创建组件的方式,一个是用class,一个是函数方式声明的,函数式组件没有state这个属性,用这个属性,请选用class方式声明。

app.js是使用函数式声明的组件

3.使用js和jsx,写法是一样的,引用组件的方式也是一样的

4.在标签里面绑定事件的方法

5.jsx可以防止XSS注入攻击

6.Babel会吧jsx转译为一个名为React.creatElement()函数调用

7.react下载路由

npm install --save react-router react-router-dom

8.React 的Router的使用方法

js的方式:动态的切换路由 this.props.history.push('/login')

html方式:

	<Router>  //需要包在最外层
    	      <Route />
              <Link></Link>  跳转页面
    </Router>
    
    

image.png

1.Router包在最外层

2.layout左侧silder的Link是菜单的标签

3.layout右侧的main的组件的切换

router的渲染菜单栏,多条数据需要使用函数map循环数据

根据路由地址,渲染路由匹配的组件,跟vue的不同是,vue,只需要提供一个 <router-view></router-view>一个路由出口,就可以根据路由的地址,准确的渲染出路由匹配的组件,而react需要自己去处理数据,进行数据的渲染,匹配路由的组件

9.src下面的index.js是react项目的入口文件

10.src下面的pages,是用来写每个页面的组件的

11.react解决跨域 参考www.cnblogs.com/anin/p/1355… 重点:配置完需要重启项目,否则不生效,将setupProxy引入到入口文件index.js当中

12.react.js的this问题

正确使用函数的方法:改变this的指向,在react里面,类的方法默认不会绑定this函数
1.constructor里面进行事件的绑定

2.使用箭头函数

13.react 路由的跳转,this.props没有history这个属性解决方案

知识点:高阶组件中的withRouter, 作用是将一个组件包裹进Route里面, 然后react-router的三个对象history, location, match就会被放进这个组件的props属性中.

1.react的方法:在引入,页面里面引用  import { withRouter } from 'react-router-dom'
导出的时候 export default withRouter(SiderDemo)  需要用withRouter包裹一下当前组件的名称

2.可以使用原生js
window.location.href = '路径';
window.open('about:blank').location.href = '路径';

14.路由导航:在登录页面的componentWillMount的生命周期,简单的判断是否有token,如果有,直接跳转页面,否则,在登录页面

15.基于axios进行二次网络请求

1.在request里面,需要return request,把token放在header里面
2.在respone里面,需要return respone,根据返回值,判断是否需要跳转到首页

16.react监听数据变化

17.Hook

可以在不编写class的情况下,也就是函数式编程使用state以及其他的react特性,
常见的HOOK与class的区别
HOOK:
1.useState:是替换,不是合并
useState返回一对:当前状态值和允许你更新状态的函数
2.useEffect:取代生命周期
3.useContext:跨组件共享数据
4.useCallback:性能优化
5.useMemo:性能优化
6.useRef
Class:
1.this.setState 是合并
    

18.父组件引入子组件,引入之后,可以直接使用

image.png