美文网首页
React初识

React初识

作者: mm_tang | 来源:发表于2020-03-18 13:15 被阅读0次

对于一直使用angular的我,感觉react和angular之间的编写和思想还是有很多不同的地方,这也是我选择学习react的原因。写这篇文章,也希望通过一些小案例,帮助和我一样的react小白更好的了解它~

react有什么优点

  • 生态强大
  • 上手简单
  • 社区强大

react环境搭建

① 首先进行本地的node安装
② 安装react的脚手架   npm install -g create-react-app
③ 创建我们的第一个实验项目  create-react-app react-demo
创建成功之后,关于项目目录,其实和其他的框架是差不多的, 主要是index.js : 这个就是项目的入口文件,第一次尝试我们可以改改这里的代码~

HelloWorld组件的初尝试

react的组件化开发主要使用的JSX语法,在写helloworld之前,先简单的介绍一下JSX.

  • JSX就是Javascript和XML结合的一种格式。React发明了JSX,可以方便的利用HTML语法来创建虚拟DOM,当遇到" < " JSX就当作HTML解析,遇到" { "就当JavaScript解析
    jsx中的一些小坑
  • 在jsx中添加class的时候,react为了和js中的class冲突,所以使用的是“className”
  • 在jsx中需要解析html的时候需要使用dangerouslySetInnerHTML 例子:"<"li dangerouslySetInnerHTML={{__html:item}}>"
react是组件化编写
import React, {Component} from 'react' // 引入React中必要的文件
class App extends Component{ // App是组件,react中的组件都是大写字母开头
    render(){
        return (
           // return中只能有一个根标签,当不希望渲染额外标签时,可以用<> 或者<React.Fragment>进行包裹
            <div>
                Hello World
            </div>
        )
    }
}
export default App;

react的进阶实例(响应式设计和数据绑定)

react是不建议直接操纵DOM元素的, 更提倡数据驱动,通过改变数据可以完成页面的更新。

class TodoList extends Component {
  constructor(props){
    super(props)  // 调用父类的构造函数,固定写法
    this.state={  // 定义需要使用的到的变量,
        inputValue:'' , // input中的值
        list:['学习Angular', '学习React']   //列表内容
    }
    // this指向不对,this默认指向的是组件,而不是调用的地方,你需要重新用bind设置一下指向
    // 构造函数中绑定性能会高一些
    this.inputChange= this.inputChange.bind(this);
  }
  
    // 改变input的输入值
    public inputChange(e){
        console.log(e.target.value);
        // 是React中改变值, 需要使用this.setState方法。
         this.setState({
            inputValue:e.target.value
        })
     }
     
    // 添加新的待办事项
    public addList(){
        this.setState({
            list:[...this.state.list,this.state.inputValue]
        })
    }
     
     // 删除待办事项
    public deleteItem(index){
        let list = this.state.list  // 坑:React是禁止直接操作state的,所以最好要先赋值给一个新的变量,在进行操作
        list.splice(index,1)
        this.setState({
            list:list
        })
    }

    render() { 
        return ( 
          <>
           <input value={this.state.inputValue} onChange={this.inputChange} />
           <button onClick={this.addList.bind(this)}> 增加服务 </button> // 也可以在这里进行this的绑定
           <ul>
                {
                    this.state.list.map((item,index)=>{
                       // 用map循环时,需要设置一个不同的key值,这是react的要求
                        return ( // 如果代码要换行,return后边就需要添加一个圆括号
                            <li
                            key={index+item}
                            onClick={this.deleteItem.bind(this,index)}
                            >{item}</li>
                        )
                    })
                }
            </ul>  
          </>
         );
    }

}
export default TodoList;

react组件的拆分(以及涉及到的父子组件的传值)

拆分上个进阶的demo组件,创建一个子组件 Item
import React, { Component } from 'react';
class Item  extends Component {
    constructor(props){
       super(props)
       this.handleClick=this.handleClick.bind(this)
    }

    render() { 
        return ( 
            <div onClick={this.handleClick}>{this.props.content}</div>  // 通过props来接收父组件传过来的值
         );
    }
    
   public handleClick(){
      // 通过调用父组件通过props传过来的方法,实现子组件向父组件的传值
       this.props.deleteItem(this.props.index)
    }
}
export default Item;
 原本的父组件TodoList
 import React, { Component } from 'react';
 import Item from './Item'; // 引入拆分出去的子组件
 
 class TodoList extends Component {
  constructor(props){
    super(props)
    this.state={
        inputValue:'' ,
        list:['学习Angular', '学习React']
    }
    this.inputChange= this.inputChange.bind(this);
  }
  
    // 改变input的输入值
    public inputChange(e){
        console.log(e.target.value);
         this.setState({
            inputValue:e.target.value
        })
     }
     
    // 添加新的待办事项
    public addList(){
        this.setState({
            list:[...this.state.list,this.state.inputValue]
        })
    }
     
     // 删除待办事项
    public deleteItem(index){
        let list = this.state.list
        list.splice(index,1)
        this.setState({
            list:list
        })
    }

    render() { 
        return ( 
          <>
           <input value={this.state.inputValue} onChange={this.inputChange} />
           <button onClick={this.addList.bind(this)}> 增加服务 </button>
           <ul>
                {
                    this.state.list.map((item,index)=>{
                        return (
                            <div>
                                <Item content={item} // 引用子组件,并向子组件中传item的值
                                key={index+item}  
                                index={index}
                                deleteItem={this.deleteItem.bind(this)} // 向子组件中传相关的父组件的删除方法
                                />
                            </div>
                        )
                    })
                }
            </ul>  
          </>
         );
    }

}
export default TodoList;

父子组件传值的简单总结:

  • 父组件传递给子组件: 通过属性props传值,子组件通过this.props来获取
  • 子组件传递给父组件:
    ①:父组件将方法当作一个属性,传递给子组件
    ②:子组件在组件中调用父组件传递进来的function,并传入相关的参数

react中的单项数据流的介绍:

this.state的值只能在本组件中进行修改,子组件不能进行修改,它是只读属性,防止在父组件中调用多个子组件子组件同事修改this.state。

react的生命周期

终于到了react生命周期的介绍啦,是不是有点期待呢~ react的生命周期还是挺多的,希望我可以介绍清楚哈~
啥是生命周期?? ==》 就是在某一时刻,可以自动执行的函数啦~

Initialization:初始化阶段,用来定义属性props和state

  1. 其实constructor是个构造函数,它不能算的上是生命周期虽然他们的性质很相似,但是我们可以把它理解为是react的初始化阶段。

Mounting: 挂在阶段

  1. componentWillMount : 在组件即将被挂载到页面的时刻执行,可以进行数据的查询,只在页面刷新时执行一次。
  2. render : 页面state或props变更的时候使用。
  3. componentDidMount : 组件挂载结束时被执行,只在页面刷新时执行一次。

Updation: 更新阶段

  • 与states相关的
    1. shouldComponentUpdate: 组件更新前执行
    2. componentWillUpdate: 在组件更新之前,但shouldComponenUpdate之后被执行
    3. render: 更新的时候执行
    4. componentDidUpdate在组件更新之后执行,它是组件更新的最后一个环节
  • 与props相关的
    1. componentWillReceiveProps: 接受props的组件才会触发这个生命周期,子组件接收到父组件传递过来的参数,父组件render函数重新被执行,这个生命周期就会被执行。

Unmounting: 销毁阶段

  1. componentWillUnmount: 组件被删除时执行

总结

初识react,还有很多不足的地方~ 希望大家可以一起学习,一起进步鸭~

相关文章

  • ReactJs实现的第一个项目--双11营销活动页面

    初识React:React --- A JavaScript Library for building User ...

  • 02基础语法--001--RN工作原理

    [TOC] 初识 React Native 1.1React Native的优点 React Native 则将你...

  • React组件学习笔记——慕课网

    React组件学习笔记——慕课网 React组件慕课网视频:传送门 第1章 初识React 1.1 React基本...

  • 第一章:初识React

    React 初识 React 是一个用于构建用户界面的 JAVASCRIPT 库。React主要用于构建UI,很多...

  • 初识React

    断断续续看了一段React的介绍,一直没有实践,趁着年前集体“放羊”的时间,初步入门,故做此文以便日后翻阅。 1....

  • 初识React

    定义组件的两种方式 函数定义 类定义 使用React时,值得注意的点: 所有的React组件必须像纯函数那样使用它...

  • 初识React

    React简介 React首次被提出是在2014年的f8大会(f8是由facebook组织的一个年度的技术峰会,目...

  • 初识React

    一、插件或框架的好处 从久远的时代到现在,我们的网页更加动态化与强大,大家在学习的过程中,发现或了解过很多很...

  • 初识react

    【转】react是一个js框架,类似于jquery,但是他做了很大的变化,它将利用jsx语法,将结构(html)和...

  • React初识

    React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不...

网友评论

      本文标题:React初识

      本文链接:https://www.haomeiwen.com/subject/kpvqyhtx.html