学习react

news2024/9/21 22:56:07

这里写自定义目录标题

  • 学习React

学习React

安装react的脚手架

npm i create-react-app -g

通过脚手架创建demo

D:\dev_project>create-react-app react-demo
You are running Node 11.1.0.
Create React App requires Node 14 or higher.
Please update your version of Node.

说我的node版本太低了,重新换一个node版本,我的node版本是通过nvm控制的,nvm的版本是1.1.7

升级node到18.2.0的版本

安装脚手架

C:\Windows\system32>npm i create-react-app -g
npm ERR! Unexpected token '.'

查了一下资料,别人说是nvm的版本太低导致的问题,我重新安装了一下nvm到1.1.10的版本。

重新安装了nvm,升级到1.1.10的版本,再安装就没问题了。

D:\dev_project>create-react-app react-demo

Creating a new React app in D:\dev_project\react-demo.

Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts with cra-template...


added 1416 packages in 1m

Initialized a git repository.

Installing template dependencies using npm...

added 54 packages in 7s
Removing template package using npm...


removed 1 package in 3s

Created git commit.

Success! Created react-demo at D:\dev_project\react-demo
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd react-demo
  npm start

Happy hacking!

执行npm start
能看到这样一个页面
在这里插入图片描述

把src文件夹内的文件全部删除
自己新建一个index.js

import React from 'react'
import ReactDom from 'react-dom'

const element = React.createElement('h1',{id:'el'},'Hello React');

ReactDom.render(element,document.getElementById('root'))

从上面的代码我们能看到我们使用react创建了h1标签元素。

我们再学习创建几个元素:

<div class="list">
  <h1>水果</h1>
  <ul>
    <li>苹果</li>
    <li>橘子</li>
  </ul>
</div>

写出来的代码如下:

import React from 'react'
import ReactDom from 'react-dom'

const element = React.createElement('div',{className:'list'},[
    React.createElement('h1',null,'水果'),
    React.createElement('ul',null,[
        React.createElement('li',null,'苹果'),
        React.createElement('li',null,'橘子'),
    ]),

]);

ReactDom.render(element,document.getElementById('root'))

得到页面
在这里插入图片描述
这种方式写代码太复杂了,看看有没有简单的方法。

import React from 'react'
import ReactDom from 'react-dom'

const name = 'Jack'

const element = <h1>Hello, {name}</h1>

ReactDom.render(element,document.getElementById('root'))

得到页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function combineName(person){
    return person.firstName + ' ' + person.lastName;
}
const Jack_Ma = {
    firstName: 'Jack',
    lastName:'Ma',
}
const name = 'Jack'
const element = (<h1>Hello,{combineName(Jack_Ma)}</h1>)
ReactDom.render(element,document.getElementById('root'))

页面
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function combineName(person){
    return person.firstName + ' ' + person.lastName;
}

function getGreeting(person){
    if(person){
        return <h1>Hello, {combineName(Jack_Ma)}</h1>
    }else{
        return <h1>Hello,Strange</h1>
    }
}

const Jack_Ma = {
    firstName: 'Jack',
    lastName:'Ma',
}

const Tony = null

const name = 'Jack'

const element = getGreeting(Jack_Ma)

const element2 = getGreeting(Tony)

ReactDom.render([element,element2],document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function tick(){
    const element = (
        <div>
            <h1>Hello, Jack</h1>
            <h2>It is {new Date().toLocaleTimeString()}.</h2>
        </div>
    );
    ReactDom.render(element,document.getElementById('root'))
}
setInterval(tick,1000);

页面
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function Welcome(props){
    return <h1>Hello,{props.name}</h1>
}

const element = <Welcome name="Jack"></Welcome>;

ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'
class Welcome extends React.Component{
    render(){
        return <h1>Hello,{this.props.name}</h1>;
    }
}
const element = <Welcome name="Jack1"></Welcome>;
ReactDom.render(element,document.getElementById('root'))

页面
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

class Welcome extends React.Component{
    render(){
        return <h1>Hello,{this.props.name}</h1>;
    }
}

function App(){
    return (
        <div>
            <Welcome name="JAck1"></Welcome>
            <Welcome name="JAck2"></Welcome>
            <Welcome name="JAck3"></Welcome>
        </div>
    )
}
const element = App();
ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

class Welcome extends React.Component{
    render(){
        return <h1>Hello,{this.props.name}</h1>;
    }
}

class App extends React.Component{
    render(){
        return (
            <div>
                <Welcome name="Jack1"></Welcome>
                <Welcome name="Jack2"></Welcome>
                <Welcome name="Jack3"></Welcome>
                <Welcome name="Jack4"></Welcome>
            </div>
        )
    }
}
const element = <App></App>;

ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

class Clock extends React.Component {
    constructor(props){
        super(props);
        this.state = {date:new Date()}
    }

    componentDidMount(){
        this.timerID=setInterval(
            ()=>this.tick(),
            1000
        )

    }
    componentWillUnmount(){
        clearInterval(this.timerID);
    }

    tick(){
        this.setState({
            date:new Date()
        })
    }

    render(){
        return (
            <div>
                <h1>Hello,world!</h1>
                <h1>It is {this.state.date.toLocaleTimeString()}.</h1>
            </div>
        )
    }
}
const element = <Clock></Clock>
ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

class Clock extends React.Component {
    constructor(props){
        super(props);
        this.state = {date:new Date()}
    }

    componentDidMount(){
        this.timerID=setInterval(
            ()=>this.tick(),
            1000
        )

    }
    componentWillUnmount(){
        clearInterval(this.timerID);
    }

    tick(){
        this.setState({
            date:new Date()
        })
    }

    render(){
        return (
            <div>
                <h1>Hello,world!</h1>
                <h1>It is {this.state.date.toLocaleTimeString()}.</h1>
            </div>
        )
    }
}

function App(){
    return (
        <div>
            <Clock></Clock>
            <Clock></Clock>
            <Clock></Clock>
        </div>
    )
}
const element = App();
ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

class Toggle extends React.Component {
    constructor(props){
        super(props)
        this.state = {isToggleOn:true}
        this.handleClick = this.handleClick.bind(this);
    }

    handleClick(){
        this.setState(state =>({
            isToggleOn:!state.isToggleOn
        }));
    }
    render(){
        return (
            <button onClick={this.handleClick}>
                {this.state.isToggleOn?'ON':'OFF'}
            </button>
        )
    }
}
const element = <Toggle></Toggle>;
ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述
点击后:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function WarningBanner(props){
    if(!props.warn){
        return null;
    }

    return (
        <div className='warning'>Warning!</div>
    )
}

class Page extends React.Component {
    constructor(props){
        super(props);
        this.state = {showWarning:true};
        this.handleToggleClick = this.handleToggleClick.bind(this)
    }

    handleToggleClick(){
        this.setState(state =>({
            showWarning:!state.showWarning
        }));
    }
    render(){
        return (
            <div>
                <WarningBanner warn={this.state.showWarning}></WarningBanner>
                <button onClick={this.handleToggleClick}>
                    {this.state.showWarning?'Hide' : 'Show'}
                </button>
            </div>
        )
    }
}
const element = <Page></Page>;
ReactDom.render(element,document.getElementById('root'))

在这里插入图片描述
代码:

import React from 'react'
import ReactDom from 'react-dom'
const numbers = [1,2,3,4,5];
const listItems = numbers.map((number)=>
<li>{number}</li>)
const element = <ul>{listItems}</ul>;
ReactDom.render(element,document.getElementById('root'))

页面:
在这里插入图片描述

代码:

import React from 'react'
import ReactDom from 'react-dom'

function NumberList(props){
    const numbers = props.numbers;
    const listItems = numbers.map((number)=>
    <li key={number.toString()}>{number}</li>);
    return (
        <ul>{listItems}</ul>
    );
}
const numbers = [1,2,3,4,5,6];
const element = <NumberList numbers={numbers}></NumberList>;
ReactDom.render(element,document.getElementById('root'))

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

找不到合适好用的redis客户端工具?试试官方的客户端工具RedisInsight

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 之前使用的redis客户端工具是AnotherRedisDesktopManager AnotherRedisDesktopManager github地址: https://github.com/qishibo/AnotherRedisDesktopManag…

千锋JavaScript学习笔记

千锋JavaScript学习笔记 文章目录千锋JavaScript学习笔记写在前面1. JS基础1.1 变量1.2 数据类型1.3 数据类型转换1.4 运算符1.5 条件1.6 循环1.7 函数1.8 对象数据类型1.9 数组和排序1.10 数组常用方法&#xff1a;1.11 字符串常用方法1.12 数字常用方法1.13 时间常用方法1.14…

九龙证券|三元锂离子电池和磷酸铁锂离子电池的特点和优劣势详解

动力蓄电池包括锂离子动力蓄电池、金属氢化物/镍动力蓄电池等。锂离子动力蓄电池一般简称为锂离子电池&#xff0c;锂离子电池是新能源轿车动力锂电池的重要品类&#xff0c;商场占有量也是最大的。新能源轿车商场上&#xff0c;锂离子电池常见的是磷酸铁锂离子电池和三元锂离子…

《图解HTTP》读书笔记

第一章、了解Web及网络基础 HTTP&#xff1a;HyperText Transfer Protocol&#xff0c;超文本传输协议。 HTML&#xff1a;HyperText Markup Language&#xff0c;超文本标记语言。 URL&#xff1a;Uniform Resource Locator&#xff0c;统一资源定位符。 把与互联网相关联的…

SQL题面试题

有3个表S(学生表)&#xff0c;C&#xff08;课程表&#xff09;&#xff0c;SC&#xff08;学生选课表&#xff09; S&#xff08;SNO&#xff0c;SNAME&#xff09;代表&#xff08;学号&#xff0c;姓名&#xff09; C&#xff08;CNO&#xff0c;CNAME&#xff0c;CTEACHER&…

SQL同时在线问题的解法

前言 同时在线相关的问题&#xff0c;在很多行业中也经常出现&#xff0c;比如&#xff1a; 统计同时最大主播数量统计同时最大在线人数统计同时最大打车人数… 很多人看到这类题&#xff0c;一脸懵逼&#xff0c;甚至连题意都看不懂&#xff0c;但是这道题是面试题中的常客&a…

SAP FICO CO-PA(获利分析会计)简介

一、概念信息 1、目标 CO-PA的目标&#xff1a;确定市场段的获利能力。 其中市场段就是一些指标的组合&#xff0c;比如客户A&#xff0c;加上产品&#xff11;就可以是一个获利分析段。 分析各个获利分析段的贡献边际&#xff0c;为后续销售决策提供支持&#xff08;主要与…

4、PyCharm中配置PyQt5-tools

1、 配置Qt Designer Workint directory&#xff1a;$FileDir$ 2、配置PyUIC Arguments&#xff1a;$FileName$ -o $FileNameWithoutExtension$.py Workint directory&#xff1a;$FileDir$ 3、配置PyRcc Arguments&#xff1a;$FileName$ -o $FileNameWithoutExtension$_rc.…

Linux常用命令——time命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) time 统计给定命令所花费的总时间 补充说明 time命令用于统计给定命令所花费的总时间。 语法 time(参数)参数 指令&#xff1a;指定需要运行的额指令及其参数。 实例 当测试一个程序或比较不同算法时&…

【进阶】Spring Boot配置文件(.properties提示有问题版)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、配置文件作用二、配置文件的格式三、properties配置文件说明1. properties 基本语法2. 读取配置文件3. properties缺点分析四、 yml配置文件说明1. yml基本语法2. yml使用进阶3. 注意&#xff1a;value值加单双引…

即时通讯开发之TCP 交互数据流、成块数据流

目前建立在 TCP 协议上的网络协议特别多,有 telnet,ssh,有 ftp,有 http 等等。 这些协议又可以根据数据吞吐量来大致分成两大类: 交互数据类型&#xff1a;例如 telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文 字等等。 数据…

【JavaScript】常见的事件(鼠标、键盘、表单等)

&#x1f4bb;【JavaScript】常见的事件 &#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻前端&…

Xilinx 7系列FPGA之Artix-7产品简介

数字化革命改变了对新手和有丰富经验的 FPGA 设计人员的期望。为了在航空航天和国防、通信基础设施、医疗、工业和消费电子等对成本敏感的市场中竞争&#xff0c;需要在广泛的密度范围内提供强大的高性能功能组合。在不牺牲性能的情况下&#xff0c;开发人员必须能够扩展使用模…

python和netlogo软件模拟病毒传播仿真模型(一)

目前国内在网络舆情仿真建模中所使用的仿真平台主要有 Netlogo、Anylogic、Matlab、Vensim 等&#xff0c;netlogo软件是一款比较通用的。 但是他是由logo语言构成&#xff0c;语言逻辑很让人抓马。 这里python 中的mesa可以实现其中一部分&#xff0c;这里看一下病毒传播仿真模…

WPF 笔记3——在XAML中给对象属性赋值

看B站刘铁猛老师视频学习WPF XAML语言是从xml文件派生而来&#xff0c;是声明式语言&#xff0c;一个标签就表示声明了一个对象。 对象的值可以存储在对象的字段中&#xff0c;也可存储在对象的属性中&#xff1b; 通过给对象的属性赋值&#xff0c;可以在赋值时检查值的合法…

Redis6学习笔记【part2】基本数据类型与常用命令

一.单线程多路IO复用技术 Redis是单线程多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符&#xff08;Socket&#xff09;的就绪状态&#xff0c;比如调用 select 和 poll 函数&#xff0c;传入多个文件描述符&#xff0c;如果有一个文件描述符就绪&#xff0c;则…

【make、makefile】

前言 打怪升级第&#xff1a;26天 | make、Makefile make是一条命令&#xff0c;Makefile是一个文件&#xff0c; make是一个命令工具&#xff0c;是一个解释Makefile文件中指令的命令工具。 makefile是一个围绕依赖关系和依赖方法构造的一个自动化编程工具&#xff0c; 一个…

博客部署教程

1:安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 //安装必要工具yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //设置yum源yum install -y docker-ce //下载dockersystemctl start docker //启…

excel函数技巧:两个查询函数的用法比较 下篇

VLOOKUP和LOOKUP这对高频函数的较量注定是场持久战。在前两个回合的较量中&#xff0c;VLOOKUP占据上风&#xff0c;此番更要乘胜追击。新一轮较量&#xff0c;即刻开战&#xff01;***ROUND 03 交叉查询什么是交叉查询&#xff1f;我们可以通过一个查找值查找多个字段。如果被…

Android 深入系统完全讲解(26)

AudioTrack 构造过程 每一个音频流对应着一个 AudioTrack 类的一个实例&#xff0c;每个 AudioTrack 会在创建时注册到 AudioFlinger 中&#xff0c;由 AudioFlinger 把所有的 AudioTrack 进行混合&#xff08;Mixer&#xff09;&#xff0c;然后输送到 AudioHardware 中进行播…