• React 学习笔记


    (day1)

    1.初始react

      react的基本概念:React是Facebook开发出的一款JS库,Facebook认为MVC无法满足他们的扩展需求(2013年5月开源)

      特点:

        ①声明式设计:直接有返回值;

        ②高效;灵活;

        ③组件:react中一切皆为组件

        ④JSX*:是js语法的扩展,可以在js文件中书写html结构;

        ⑤单向响应的数据流:要改变state中的数据时,需要手动的使页面更新(利用this.setState,后面会介绍他的用法)

        ⑥react是一个轻量级的js库;响应式;不是一个mvc框架;不使用模板;

        

       原理:

        虚拟DOM react把DOM抽象成为一个JS对象

        diff算法

        虚拟DOM确保对界面真正发生变化的部分进行实际的DOM操作

        逐层次的来进行节点的比较

      node.js是MVC框架,而Vue是MVVM框架(其实,如果没有Vuex那么Vue只是一个MV框架),而React则是一个不完整的MVC/MVVM框架;

    react中利用函数化/式编程:也就是说输入一个值,输出的结果是特定的;

    2.基本环境搭建

      react开发环境的搭建

        1.react.js 核心文件

        2.react-dom.js 渲染页面Dom 当前文件依赖于react核心文件

        3.babel.js ES6转ES5 JSX语法转化成javascript 浏览器的兼容

      下载

        react 核心包     npm i react --s

        react-dom    npm i react-dom --s

        babel      npm i babel-standalone --s

    3.jsx使用

      jsx=JavaScript xml  是js的扩展语法

      优点: 1.执行效率更快

             2.他是类型安装的,编译过程中能及时发现错误

          3.在使用jax的时候编译会更加的简单和快速

     

       语法:

        1.注释:{/*我是需要注释的内容*/}

        2.多行标签:需要有一个父元素包裹

        3.变量:语句中使用已定义的变量时用{}包裹

        4.ReactDOM.render(jsx内容,dom节点)

        5.<script type="text/babel"></script>  script标签需要加type属性

    4.遍历数组

     

    5.遍历对象

    Object.keys(obj);方法会返回一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

    Object.values(obj);方法返回一个给定对象自己的所有可枚举属性值的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

     
    (day2)

    6.组件基础

    组件特点:高内聚低耦合

    组件当中的重要内容:1.构建方式 2.组建的属性 3.生命周期

    react的组件分成3个部分: 1.属性props  2.状态state 3.生命周期

    react的组件:通过组件可以把页面中的ui部分分成 独立的 高复用的部分 让每个开发者更加专注于一个个独立的组件

    组件与组件化:组件就是用实现页面局部功能的代码集合 简化页面的复杂程度 提高运行效率;组件化是指当前程序全部是由组件构成的

    组件的创建:1.函数创建/无状态组成 2.类组件

    注意:组件名称首字母必须大写

    (普通组件)

     (父子组件)

     2.类组件

    (普通组件)

    7.props基础

    8.props验证与默认值

    props验证需要先下载并引入prop-types包   npm install prop-types --save

     

    9.渲染外部数据与练习

    10.state属性

     

     

    11.ref转发

    字符串方式

    回调函数方式

     

     React.createRef

    12.事件与this指向

     

    13.条件渲染

    (jsx中不允许使用if,所以可给一个标识符用以判断)

     

    14.状态提升

    多个子组件可能使用相同的数据,提升到他们最近的父组件中,多个子组件需要利用他们状态的情况下,那么就需要用到状态提升

    15.react脚手架

    1.npm install create-react-app -g   //全局安装脚手架

    2.cd 需要创建的文件夹中

    3.create-react-app 项目名 //创建项目

    4.npm start   //启动项目

    16.react组件的基本使用

    1.在组件的js文件中 rcc 可快速创建出一个基本组件的框架

    2.Fragment标签和require引用

    React 中的一个常见模式是一个组件返回多个元素。Fragments 允许你将子列表分组,而无需向 DOM 添加额外节点。

    key 是唯一可以传递给 Fragment 的属性。未来我们可能会添加对其他属性的支持,例如事件。

     

    17.react的组件传值

    父组件向子组件传值(通过props传值)

    子组件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Children extends Component{
      constructor(props){
        super(props);
      }
      render(){
        return(
          <div>这是:{this.props.name}</div> // 这是 父向子
        )
      }
    }

    父组件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class App extends React.Component{
      render(){
        return(
          <div>
            <Children name="父向子"/>
          </div>
        )
      }
    }

    父组件向子组件传值(回调函数)

    子组件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Children extends Component{
      constructor(props){
        super(props);
      }
      handerClick(){
        this.props.changeColor('skyblue') // 执行父组件的changeColor 并传参 必须和父组件中的函数一模一样
      }
      render(){
        return(
          <div>
            <div>父组件的背景色{this.props.bgcolor}</div> // 子组件接收父组件传过来的值 bgcolor
            <button onClick={(e)=>{this.handerClick(e)}}>改变父组件背景</button> // 子组件执行函数
          </div>
        )
      }
    }

    父组件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class Father extends Component{
      constructor(props){
        super(props)
        this.state = {
          bgcolor:'pink'
        }
      }
      bgChange(color){
        this.setState({
          bgcolor:color
        })
      }
      render(props){
        <div style={{background:this.state.bgcolor}}>
                // 给子组件传递的值 color
          <Children bgcolor={this.state.bgcolor} changeColor={(color)=>{this.bgChange(color)}} />
                            // changeColor 子组件的参数=color 当做形参
        </div>
      }
    }

    兄弟组件传值(子传给父,父再传给另一个子)

    子组件1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Children1 extends Component{
      constructor(props){
        super(props);
      }
      handerClick(){
        this.props.changeChild2Color('skyblue')
        // 改变兄弟组件的颜色 把changeChild2Color的参数传给父
      }
      render(){
        return(
          <div>
            <div>children1</div>
            <button onClick={(e)=>{this.handerClick(e)}}>改变children2背景</button>
          </div>
        )
      }
    }

    子组件2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Children2 extends Component{
      constructor(props){
        super(props);
      }
      render(){
        return(
          <div style={{background:this.props.bgcolor}}>
          // 从父元素获取自己的背景色
            <div>children2 背景色 {this.props.bgcolor}</div>
            // children2 背景色 skyblue
          </div>
        )
      }

    父组件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class Father extends Component{
      constructor(props){
        super(props)
        this.state = {
          child2bgcolor:'pink'
        }
      }
      onchild2bgChange(color){
        this.setState({
          child2bgcolor:color
        })
      }
      render(props){
        <div>
          <Children1 changeChild2Color={(color)=>{this.onchild2bgChange(color)}} />
          <Children2 bgcolor={this.state.child2bgcolor} />
        </div>
      }
    }

    18.react的生命周期

    组件的生命周期可分成三个状态:

    • Mounting:已插入真实 DOM
    • Updating:正在被重新渲染
    • Unmounting:已移出真实 DOM

    生命周期的方法有:

      • componentWillMount 在渲染前调用,在客户端也在服务端。

      • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。

      • componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。

      • shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
        可以在你确认不需要更新组件时使用。

      • componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。

      • componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

      • componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

    19.react的路由

     2.

    index.js中

    app.js中

     3.exact 精准匹配  

      

     4.switch 当有相同的Route path出现时

    5.重定向redirect

     6.二级路由(在组件中引用)

  • 相关阅读:
    404 页面不存在
    Elasticsearch 目录总结
    Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题
    自动化测试工具-Selenium IDE 教程一
    搜索引擎背后的经典数据结构和算法
    如何收缩SQLServer 数据库日志文件大小?
    如何处理自我感动【转载】
    Microsoft.Jet.OLEDB.4.0 和 Microsoft.ACE.OLEDB.12.0 的区别
    windows 2012 IIS 部署 .net core HTTP Error 502.5
    Windows Server2012 KB2919355 补丁无法安装
  • 原文地址:https://www.cnblogs.com/kangxinzhi/p/13731473.html
Copyright © 2020-2023  润新知