React基本知识

一、React特点
(1)声明式设计:React采用声明范式,可以轻松描述应用,声明式是告诉计算机要去做什么而不管怎么做,而命令式是描述如何去做。
(2)高效:通过对Dom的模拟(虚拟dom),最大限度的减少与DOM的交互
(3)灵活:可以与已知的库或框架很好的配合
(4)JSX:是javascript语法的扩展
(5)组件:通过React构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中
(6)单向响应的数据流:这也是为什么比传统数据绑定更简单
注意:
vue:双向响应数据流用template
React:单向响应的数据流
二、函数化编程
1、柯里化函数

实现一个函数add(3)(5)结果等于8 add(1)(2)(3)(4)结果为10

    function fn(a){
        return function(b){
            return a+b;
        }
    }


     function fn(a){
        return function(b){
           return function(c){
               return a+b+c;
           }
        }
    }


2、什么是一个纯函数

输入一定输出也一定

3、声明式和命令式

    var arr = [10,20,30,40];

    for(var i=0;i<arr.length;i++){
        arr[i]+=10;
    }
//声明式
    arr.map(item=>item+10);

React必须安装的依赖

cnpm install react react-dom -S
三、在搭建的webpackproject上练习组件
(1)public->index.html

<div id="root"></div>

(2).babelrc文件中,原来的基础上加 ["@babel/preset-react"]

{
    "presets": [
        [
            "@babel/preset-env",
            {
                "targets": {
                    "browsers": [
                        "last 2 versions"
                    ]
                }
            }
        ],
        ["@babel/preset-react"]
    ]
}

(3)在main.js中引入React

import React from "react";
import ReactDOM from "react-dom";

let url="http://www.baidu.com";
let imgUrl="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_86d58ae1.png";

//注意只用一个花括号
let dom=<div>
    <a href={url}>百度</a>
    <img src={imgUrl} className="abc"/>
    <label htmlFor="box">用户名</label>
    <input type="text" id="box"/>
</div>

ReactDOM.render(
    dom,
    document.getElementById("root"),
    ()=>{
        console.log("渲染成功")
    }
)
/*
ReactDOM.render()
    参数1:需要渲染的DOM元素或者组件
    参数2:挂载点
    参数3: 回调

*/

四、模拟 v-text、 v-html、 v-show、 v-if、 v-else、 v-bind、 v-on、 v-model、 v-for
(1) v-text

let message = "Alley"
let demo = <h2>{message}</h2>

(2)v-html

let message = <h2>Alley</h2>
let demo = <div>{message}</div>

(3) v-show
v-if
v-else

let flag = false
let demo = <div>
   {flag? <h2>111</h2>: <h2>222</h2>}
    <h2 style={{display:flag?'block':'none'}}>333</h2>
    <h2 style={{display:!flag?'block':'none'}}>444</h2>
</div>

(4)v-bind

let url = "http://www.baidu.com";
let imgUrl = "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_86d58ae1.png";

let dom = <div>
    <a href={url}>百度</a>
    <img src={imgUrl}/>
</div>

(5) v-on
(6) v-model
(7) v-for

在react中不能在通过class来编写类名,只能通过className来进行编写
以及form表单中的for也不能在进行使用 而是改成htmlFor

五、ReactDOM.render()
参数1:需要渲染的DOM元素或者组件
参数2:挂载点
参数3: 回调
六、React中如何创建组件
React中通过class关键字来创建组件,React这个对象身上有一个属性Component这个Component是所有
组件的父类,如果我们想要创建组件的时候必须通过继承这个父类来创建组件

组件创建时需要注意的地方
1、组件名称必须大写
2、组件中必须有render函数,这个render函数必须返回一个JSX语法。注意的地方是只能有一个元素

render
是一个生命周期函数,render函数的作用是用来渲染jsx语法。以及虚拟DOM的对比。render函数会多次执行
只要this.state/this.props发生改不了它就会执行

react中事件的优化
1、如果在不需要传递参数的情况下,我可以将函数在constructor中提前定义,以及提前改变this指向

            constructor(){
                super();

            this.handleClick = this.handleClick.bind(this)

            }
            render(){
                return (
                    <div>
                        {
                        arr.map((item,index)=>(
                            <p key={index} onClick={this.handleClick}>{item}</p>
                        ))  
                        }
                    </div>
                )
            }

App.js中

import React from "react";
var arr=[10,20,30,40]

//创建组件的方式
class App extends React.Component{
    constructor(){
        super();
        this.handleClick=this.handleClick.bind(this)
    }
    render(){
        return(
            <div>
                {
                    arr.map((item,index)=>(
                    <p key={index} onClick={this.handleClick}>{item}</p>
                    ))
                }
            </div>
        )
    }
    handleClick(){
        console.log(this);//如果construct中没有this.handleClick=this.handleClick.bind(this),会输出undefined
    }
}
export default App;

constructor:
也是组件中的一个生命周期,如果创建组价的时候写了constructor那么就必须要书写super,
如果不写super的情况下this的指向会发生问题

    存放当前组件所需要的一些状态

    this.state = {}  状态


this.setState:
    作用是用来修改this.state中的数据,当this.setState调用了以后render函数就会重新执行。

    基本语法:
            this.setState({
                message:xxx
            })

    第二种写法
                this.setState((state)=>{
                    return {
                        message:"XXXX"
                    }
                })



    this.setState是一个异步
	this.setState的第一个参数可以是一个对象,也可以是一个函数返回一个对象,函数的参数是上一次的state
    this.setState中的第二个参数是一个回调
        作用:
            1、验证数据是否修改成功
            2、获取数据更新后最新的DOM结构
  this.setState({
        message: 1000
    },()=>{
        console.log(this.state.message);
        console.log(document.getElementById("h2").innerText)
    })
组件分类    
    1、类组件
    2、函数组件
    3、受控组件
    4、非受控组件
    5、高阶组件
    6、UI组件
    7、容器组件
    .....
    **注意:通过export方式导出,在导入时要加{ },export default则不需要**

组件状态的定义和修改

App.js中

import React from "react";


//创建组件的方式
class App extends React.Component {
    constructor() {
        super();
        //存放组件所需的一些状态
        this.state = {
            message: "1918",
            n: 0
        }
        this.handleClick=this.handleClick.bind(this);
    }
    render() {
        return (
            <div>
                <h2 id="h2">{this.state.message}</h2>
                <h2>{this.state.n}</h2>
                <button onClick={this.handleClick}>点击</button>
            </div>
        )
    }
    handleClick(){
        // this.setState({
        //     message:1000
        // },()=>{
        //     console.log(this.state.message);//输出1000
        //     console.log(document.getElementById("h2").innerText)
        // })

        this.setState((state)=>{
            return{
                message:"xxx"
            }
        })
    }
}
export default App;

super()的作用
而super( )就是将父类中的this对象继承给子类的。没有 super,子类就得不到 this 对象,没有 this 对象而要对 this 进行处理,能不报错吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
以下是React中常用的一些知识点: 1. 组件:React将用户界面拆分为可重用的组件,组件是构建React应用的基本单元。组件可以是函数组件或者类组件。 2. JSX:JSX是一种类似于HTML的语法扩展,可以在JavaScript代码中编写类似HTML的结构。它允许我们以声明式方式描述UI组件的结构。 3. Props:Props是组件的属性,用于传递数据和配置参数给组件。通过props,我们可以向子组件传递数据并进行组件之间的通信。 4. State:State是用于存储和管理组件内部的数据的对象。当state发生变化时,React会自动重新渲染组件,并更新相应的视图。 5. 生命周期:React组件具有生命周期方法,这些方法在组件的不同阶段被调用,例如组件被创建、更新、卸载等。 6. Hooks:Hooks是React 16.8版本引入的特性,它允许我们在无需编写类组件的情况下使用状态和其他React特性。常用的Hooks包括useState、useEffect、useContext等。 7. 条件渲染:React允许我们根据条件来渲染不同的内容或组件。常用的条件渲染方式包括if语句、三元表达式和逻辑与(&&)运算符等。 8. 列表渲染:React提供了map方法来遍历数组或者列表,动态生成列表项。通过列表渲染,我们可以根据数据动态生成多个相似的组件。 9. 表单处理:React提供了一些事件和处理函数来方便地处理表单的输入和提交。通过onChange事件,我们可以监听表单元素的值变化,并将其保存到组件的state中。 10. 组件通信:React中的组件通信可以通过props、状态提升、上下文(Context)和全局状态管理工具(如Redux)等方式来实现。 这些是React中常用的知识点,当然还有更多深入的内容和特性可以学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值