第1章、react基础知识;

一、react学习前期准备;

1、基本概念;

  • 前期的知识准备:

    1.javascript、html、css;

    2.构建工具:Webpack:https://yunp.top/init/p/v/1

    3.安装node:npm:https://yunp.top/init/p/v/1

    4.cnpm命令:http://npm.taobao.org/

  • 官方文档:https://reactjs.org/docs/hello-world.html

二、react jsx语法;

1、jsx语法介绍;

  • 遇到<>按照HTML语法解析,遇到{}按照JavaScript

三、react元素渲染;

import React from "react"
import Home from "./Home"
import MyNav from "./MyNav"
import StateComponent from "./StateComponent";
import ComponentLife from "./ComponentLife"
import SetStateDemo from "./setStateDemo"
import IfDemo from "./ifDemo"
import KeyDemo from "./KeyDemo"
import FormDemo from "./FormDemo"
import RefsAndDOM from "./RefsAndDOM"
import RefsForm from "./RefsForm"
import Parent from "./components/parent"
import Compose from "./compose"
import PropsTypeDemo from "./PropsTypeDemo"

// 用类的形式创建组件,Hook形式
class App extends React.Component{

    constructor(){
        super();
        this.state = {
            title:"文本1"
        }
    }

    clickChange = (data) =>{
        this.setState({
            title:data
        })
    }

    // 渲染函数
    render(){

        // const nav1 = ["首页","视频","学习"];
        // const nav2 = ["WEB","Java","Node"];

        return(
            <div>
                {
                    /* 
                        <h1>Hello React Component</h1>
                        <h3>学习React,最重要的是,心态要好!</h3>
                        
                        <Home />

                        <MyNav nav={ nav1 } title="路径导航"/>

                        <MyNav nav={ nav2 } title="学习导航"/> 
                    */
                }

                {/* <StateComponent /> */}

                {/* <ComponentLife title={ this.state.title } clickChanges={ this.clickChange }/> */}

                {/* <SetStateDemo /> */}

                {/* <IfDemo /> */}

                {/* <KeyDemo /> */}

                {/* <FormDemo /> */}

                {/* <RefsAndDOM /> */}

                {/* <RefsForm /> */}

                {/* <Parent /> */}

                {
                    /*
                    <Compose>
                        <div>我是组合效果</div>
                    </Compose> 
                    */
                }

                { 
                  <PropsTypeDemo />
                }
         
            </div>
        )
    }
}

export default App

四、react组件基础之创建组件;

import React from "react"

export default class Home extends React.Component{

    constructor(props){
        super(props);
        // this.clickHandler = this.clickHandler.bind(this);
    }

    clickHandler(element,event){
        // this无指向
        // console.log(this);
        console.log(element,event);
    }

    // apply call bind:面试常见问题
    render(){
        const names = ['iwen','ime'];
        return(
            <div>
                Home  
                {/* <button onClick={ this.clickHandler.bind(this) }>按钮</button> */}
                {/* <button onClick={ this.clickHandler }>按钮</button> */}
                {/* <button onClick={ (e) => {this.clickHandler(e)}}>按钮</button> */}
                <ul>
                    {
                        names.map((element,index) => {
                            // return <li onClick={ this.clickHandler.bind(this,element) } key={index}>{ element }</li>
                            return <li onClick={ (e) => this.clickHandler(element, e) } key={index}>{ element }</li>
                        })
                    }
                </ul>
            </div>
        )
    }
}

五、react props属性;

import React from "react"

// props不可以被修改
export default class MyNav extends React.Component{
    render(){
        return(
            <div>
                {/* jsx语法 */}
                <h3>{ this.props.title }</h3>
                <ul>
                    {
                        this.props.nav.map((element,index) =>{
                            return <li key={index}>{ element }</li>
                        })
                    }
                </ul>
            </div>
        )
    }
}

六、react state 状态;

import React from "react"

export default class StateComponent extends React.Component{
    /**
     * 组件中的状态:state
     * 以前我们操作页面的元素的变化,都是修改DOM,操作DOM
     * 但是有了React优秀的框架,我们不在推荐操作DOM,页面元素的改变使用State进行处理
     */

    constructor(props){
        super(props);
        // 定义
        this.state = {
            count:10,
            flag:true
        }
    }

    increment(){
        // setState
        this.setState({
            count:this.state.count+=1
        })
    }

    decrement(){
        this.setState({
            count:this.state.count-=1
        })
    }

    clickHandler = () =>{
        console.log(this);
    }

    render(){
        let showView = this.state.flag ? '我是孙悟空' : '我是假的孙悟空'
        return(
            <div>
                <h3>组件的State</h3>
                <p>{ this.state.count }</p>
                <button onClick={ this.increment.bind(this) }>增加</button>
                <button onClick={ this.decrement.bind(this) }>减少</button>
                <button onClick={ this.clickHandler }>关于this</button>
                <p>{ showView }</p>
            </div>
        )
    }
}

七、react组件生命周期函数;

1、基本概念;

  • componentWillMount 在组件渲染之前执行;

  • componentDidMount 在组件渲染之后执行;

  • shouldComponentUpdate 返回true和false,true代表允许改变,false代表不允许改变;

  • componentWillUpdate:数据在改变之前执行(state,props);

  • componentDidUpdate:数据修改完成(state,props);

  • componentWillReveiceProps:props发生改变执行;

  • componentWillUnmount 组件卸载前执行;

2、代码;

import React from "react"

export default class ComponentLife extends React.Component{

    constructor(props){
        super(props);
        this.state = {
            count:10
        }
    }

    componentWillMount(){
        console.log("componentWillMount");
    }

    componentDidMount(){
        console.log("componentDidMount");
    }

    shouldComponentUpdate(){
        console.log("shouldComponentUpdate");
        return true;
    }

    componentWillUpdate(){
        console.log("componentWillUpdate");
    }

    componentDidUpdate(){
        console.log("componentDidUpdate");
    }

    componentWillReceiveProps(){
        console.log("componentWillReceiveProps");
    }

    componentWillUnmount(){
        console.log("componentWillUnmount");
    }

    changeHandler = () =>{
        this.setState({
            count:this.state.count+=1
        })
    }

    clickChange = () => {
        this.props.clickChanges('我是儿子的数据');
    }

    render(){
        const { count } = this.state;
        return(
            <div>
                生命周期函数:{ count } - { this.props.title }
                <button onClick={ this.changeHandler }>修改</button>
                <button onClick={ this.clickChange }>修改title</button>
            </div>
        )
    }
}

八、react setState 是同步还是异步;

import React from "react"

export default class SetStateDemo extends React.Component{

    constructor(){
        super();
        this.state = {
            count:0
        }
    }

    // 01.异步
    increment1(){
        this.setState({
            count:this.state.count+1
        });
        console.log(this.state.count);
    }

    // 02.官网的解决方案
    increment2(){
        this.setState({
            count:this.state.count+1
        },() => {
            console.log(this.state.count);
        })
    }

    // 03.利用 promise 和 async/await 把异步改成同步
    async increment3(){
        await this.setStateAsync({count:this.state.count+1});
        console.log(this.state.count);
    }
    setStateAsync(state){
        return new Promise((resolve) =>{
            this.setState(state,resolve);
        })
    }

    render(){
        return(
            <div>
                setState同步还是异步问题
                <p>{ this.state.count }</p>
                <button onClick={ this.increment1.bind(this) }>修改1</button>
                <button onClick={ this.increment2.bind(this) }>修改2</button>
                <button onClick={ this.increment2.bind(this) }>修改3</button>
            </div>
        )
    }
}

九、react 条件渲染;

import React from "react"

export default class IfDemo extends React.Component {
    /**
     * 常用的应用常见:
     *  1.对视图条件进行切换
     *  2.做缺省值
     */

    constructor() {
        super();
        this.state = {
            isLogin: false,
            names: ["ime"]
        }
    }
    clickHandler = () => {
        this.setState({
            isLogin: true
        })
    }

    render() {
        const { names } = this.state;
        let showView = this.state.isLogin ? <div>iwen</div> :  <div>请登录</div>;

        return (
            <div>
                条件渲染:{showView}
                <button onClick={this.clickHandler}>登录</button>

                {
                    names.length > 0 ?
                        <div>
                            {
                                names.map((element, index) => {
                                    return <p key={index}>{element}</p>
                                })
                            }
                        </div>
                        :
                        <div>请等待数据正在请求....</div>
                }
                
            </div>
        )
    }
}

十、react列表渲染key;

1、基本概念;

  • 前key代表唯一索引,索引没有变化ui不会重绘,只有key发生变化才会发生重绘;

import React from "react"

export default class KeyDemo extends React.Component{

    constructor(){
        super();
        this.state = {
            userinfo:[
                {
                    name:"frank",
                    age:20,
                    sex:"男",
                    jobs:['后端']
                }
            ]
        }
    }

    clickHandler = () =>{
        this.setState({
            userinfo:this.state.userinfo.concat([{
                name:"sakura",
                age:30,
                sex:"女",
                jobs:['前端']
            }])
        })
    }

    render(){
        return(
            <div>
                <ul>
                    {
                        this.state.userinfo.map((element,index) =>{
                            return(
                                <li key={ index }>
                                    <span>姓名:{ element.name }</span>
                                    <span>年龄:{ element.age }</span>
                                    <span>性别:{ element.sex }</span>
                                    <div>
                                        职业:
                                        {
                                           element.jobs.map((childElement,childIndex) =>{
                                               return <span key={ childIndex }>
                                                         { childElement }
                                                      </span>
                                            })
                                        }
                                    </div>
                                </li>
                            )
                        })
                    }
                </ul>
                <button onClick={ this.clickHandler }>添加数据</button>
            </div>
        )
    }
}

十一、react表单受控组件;

import React from "react"

export default class FormDemo extends React.Component{

    constructor(){
        super();
        // 表单的值是受控组件
        this.state = {
            value:""
        }
    }

    handleSubmit = (e) =>{
        // 表单事件默认跳转,阻止事件
        e.preventDefault();
        console.log(this.state.value);
    }

    onChangeHandler = (e) =>{
        this.setState({
            value:e.target.value
        })
    }

    render(){
        return(
            <div>
                <form onSubmit={this.handleSubmit}>
                    <input type="text" value={ this.state.value } 
                           onChange={ this.onChangeHandler }/>
                    <input type="submit" value="提交"></input>
                </form>
            </div>
        )
    }
}

十二、React RefsDom;

import React from "react"

export default class RefsAndDOM extends React.Component{

    constructor(){
        super();
        // 创建一个获取dom对象
        this.HelloDiv = React.createRef();
        this.spanText = React.createRef();
    }

    // ui已经渲染完成,dom是存在
    componentDidMount(){
        this.HelloDiv.current.style.color = "red";

        this.spanText.current.style.color = "red";
    }

    render(){
        return(
            <div>
                <div ref={ this.HelloDiv }>
                    Hello
                </div>

                <div ref={ this.spanText }>
                    <span>这是文本信息</span>
                </div>
            </div>
        )
    }
}

十三、react表单非受控组件;

import React from "react"

export default class RefsForm extends React.Component{

    constructor(){
        super();
        this.username = React.createRef();
        this.password = React.createRef();
    }

    clickHandler = (e) =>{
        console.log("username",this.username);
        console.log(this.username.current.value);
        console.log(this.password.current.value);
    }

    render(){
        return(
            <div>
                <input type="text" ref={ this.username }/>
                <input type="text" ref={ this.password }/>
                <button onClick={ this.clickHandler }>提交</button>
            </div>
        )
    }
}

十四、react 状态提升;

// 父组件:parent
import React from "react"
import Child1 from "./child1"
import Child2 from "./child2"

export default class Parent extends React.Component{
    constructor(){
        super();
        this.state = {
            money:1
        }
    }
    changeHandler(e){
        this.setState({
            money:e.target.value
        })
    }  
    render(){
        return(
            <div>
                <div>
                    parent:
                    <input type="text" value={ this.state.money } 
                           onChange={this.changeHandler.bind(this)} />
                </div>
                <div>
                    <Child1 money={ this.state.money }/>
                </div>
                <div>
                    <Child2 money={ this.state.money }/>
                </div>
            </div>
        )
    }
}
// 子组件1:child1
import React from "react"

export default class Child1 extends React.Component{
    constructor(){
        super();
        this.state = {
            input1:0
        }
    }
    componentDidMount(){
        this.setState({
            input1:this.props.money
        })
    }
    changeHandler(e){
        this.setState({
            input1:e.target.value
        })
    }
    render(){
        return(
            <div>
                人民币:
                <span>{this.props.money}</span>
                <input type="text" value={ this.state.input1 } 
                       onChange={ this.changeHandler.bind(this) }/>
            </div>
        )
    }
}
// 子组件2
import React from "react"

export default class Child2 extends React.Component {

    constructor(){
        super();
        this.state = {
            input2:0
        }
    }

    componentDidMount(){
        this.setState({
            input2:this.props.money * 7
        })
    }

    changeHandler(e){
        this.setState({
            input2:e.target.value
        })
    }

    render() {
        return (
            <div>
                美元
                <span>{this.props.money * 7}</span>
                <input type="text" value={ this.state.input2 } 
                       onChange={this.changeHandler.bind(this)} />
            </div>
        )
    }
}

十五、react 组件组合;

import React from "react"

/**
    <Compose>
        <div>我是组合效果</div>
    </Compose> 
**/

export default class Compose extends React.Component{
    render(){
        return(
            <div>
                哈哈哈:{ this.props.children }
            </div>
        )
    }
}

十六、react PropsType 组件验证;

import React from 'react'
import PropTypes from 'prop-types';

export default class PropsTypeDemo extends React.Component{
    render(){
        return(
            <div>
                Hello:{ this.props.title }
            </div>
        )
    }
}

// PropsTypeDemo.propTypes = {
//     title:PropTypes.number.isRequired
// }

PropsTypeDemo.propTypes = {
    title:PropTypes.string.isRequired
}

// PropsTypeDemo.defaultProps = {
//     title:'默认值'
// }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cmake制作并链接动静态库

cmake制作并链接动静态库 制作静态库add_library(库名称 STATIC 源文件1 [源文件2] ...)LIBRARY_OUTPUT_PATH指定库的生成路径 制作动态库add_library(库名称 SHARED 源文件1 [源文件2] ...) 连接动静态库link_libraries连接静态库link_directories到哪个路径去找库target_link…

UnityShader学习计划

1.安装ShaderlabVS,vs的语法提示 2. 常规颜色是fixed 3.FrameDebugger调试查看draw的某一帧的全部信息&#xff0c;能看到变量参数的值

雅马哈电钢琴YDP145

数据线&#xff1a;MIDI 琴可以通过MIDI、线直接连接手机&#xff0c;播放声音 琴通过线连接电脑&#xff0c;不能直接播放声音 https://www.bilibili.com/video/BV1ws4y1M7yw 操作&#xff1a; https://usa.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win…

王道汽车4S企业管理系统 SQL注入漏洞复现

0x01 产品简介 王道汽车4S企业管理系统(以下简称“王道4S系统”)是一套专门为汽车销售和维修服务企业开发的管理软件。该系统是博士德软件公司集10余年汽车行业管理软件研发经验之大成,精心打造的最新一代汽车4S企业管理解决方案。 0x02 漏洞概述 王道汽车4S企业管理系统…

完美照片由构图决定,摄影构图基础到进阶

一、资料描述 本套摄影构图资料&#xff0c;大小1.04G&#xff0c;共有51个文件。 二、资料目录 新手必备-摄影构图技巧.doc 无忌版的《摄影构图学》.pdf 完美照片的十大经典拍摄技法.pdf 数码摄影曝光手边书.pdf 数码摄影不求人.30天学会数码摄影构图.pdf 数码单反摄影…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…

靠谱的大型相亲交友婚恋平台有哪些?相亲app软件前十名

靠谱交友软件&#xff0c;个人感觉还是要选择大型的&#xff0c;口碑好的进行选择&#xff0c;以下是我用过的婚恋平台&#xff0c;分享给大家 1、丛丛 这是我用的最久的一款脱单小程序&#xff0c;我老公就是在这个小程序找到的&#xff01;&#xff01;&#xff01; 这是一款…

CSS边框

目录 内容区&#xff08;content&#xff09;&#xff1a; 边框&#xff08;border&#xff09;&#xff1a; 前言&#xff1a; 示例&#xff1a; 内容区&#xff08;content&#xff09;&#xff1a; 内容区就是盒子里面用来存放东西的区域&#xff0c;里面你可以随便放如:…

计算机三级数据库技术备考笔记(十三)

第十三章 大规模数据库架构 分布式数据库 分布式数据库系统概述 分布式数据库系统是物理上分散、逻辑上集中的数据库系统。系统中的数据分布在物理位置不同的计算机上&#xff08;通常称为场地、站点或结点&#xff0c;本章均用场地来描述&#xff09;&#xff0c;由通信网络将…

大语言模型总结整理(不定期更新)

《【快捷部署】016_Ollama&#xff08;CPU only版&#xff09;》 介绍了如何一键快捷部署Ollama&#xff0c;今天就来看一下受欢迎的模型。 模型简介gemmaGemma是由谷歌及其DeepMind团队开发的一个新的开放模型。参数&#xff1a;2B&#xff08;1.6GB&#xff09;、7B&#xff…

VMware安装Red Hat7.9

1、下载Red Hat Enterprise Linux7.9版本 【百度网盘下载】 链接&#xff1a;https://pan.baidu.com/s/1567NfZRF48PBXfUqxumvDA 提取码&#xff1a;bm7u 2、在虚拟机中创建Red Hat7.9 【点击创建虚拟机】 【自定义高级】 【选择光盘映像安装】 全名自定义即可 【虚拟机命…

Dual-AMN论文翻译

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍&#xff1a;具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

分享 WebStorm 2024 激活的方案,支持JetBrains全家桶

大家好&#xff0c;欢迎来到金榜探云手&#xff01; WebStorm公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工具…

Zynq学习笔记--AXI 总线概述

目录 1. AXI总线概述 1.1 主要特点 1.2 通道功能 1.3 信号概览 2. AXI Interconnect 2.1 信号说明 2.2 内部结构 3. PS-PL AXI Interface 3.1 AXI FPD/LFP/ACP 3.2 Address Editor 3.3 地址空间 3.4 AXI-DDR 4. 通过ILA观察AXI信号 4.1 AXI 读通道 1. AXI总线概述…

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波…

复杂DP算法(动态规划)

复杂DP算法 一、线性DP例题1、鸣人的影分身题目信息思路题解 2、糖果题目信息思路题解 二、区间DP例题密码脱落题目信息思路题解 三、树状DP例题生命之树题目信息思路题解 一、线性DP 例题 1、鸣人的影分身 题目信息 思路 题解 #include <bits/stdc.h> #define endl …

funasr 麦克风实时流语音识别

参考: https://github.com/alibaba-damo-academy/FunASR chunk_size 是用于流式传输延迟的配置。[0,10,5] 表示实时显示的粒度为 1060=600 毫秒,并且预测的向前信息为 560=300 毫秒。每个推理输入为 600 毫秒(采样点为 16000*0.6=960),输出为相应的文本。对于最后一个语音…

Thinkphp6接入PayPal支付

沙盒环境示例 创建扩展封装类 <?php namespace lib;class PayPalApi {//clientIdprivate $clientId;//clientSecretprivate $clientSecret;//服务器地址private $host https://api-m.sandbox.paypal.com/;//主机头private $headers [];//api凭证private $token ;//报文…

YOLO系列简记

本文主要参考了论文 A Comprehensive Review of YOLO Architectures in Computer Vision: From YOLOv1 to YOLOv8 and YOLO-NAS&#xff0c;以及其中提到的各 YOLO 原论文。 NMS 对所有检测框&#xff0c;按置信度降序排序。选择最高置信度的检测框&#xff0c;添加到最终结果…

java学习之路-继承

文章目录 前言 目录 1.1继承的概念 1.2继承有什么好处&#xff0c;为何要继承 1.3继承的语句 1.4父类成员的访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 2.子类构造方法 2.1如何创建构造方法 2.2创建构造方法 3.super和this 【相同点…