重温react-01

创建react项目

// 第一步
npm install create-react-app -g
// 第二步
create-react-app my-app

目录介绍

my-app/
  README.md
  # 项目第三方依赖包
  node_modules/
  
  package.json
  # 一般用来存放静态依赖
  public/
    index.html
    favicon.ico
  # 存放项目源代码,注意只有放在scr目录下的文件才会被webpack打包
  src/
    App.css
    App.js
    App.test.js
    index.css
    # 入口文件
    index.js
    logo.svg

二次封装webpack

运行下面指令之后,会出现一个config.js文件,

npm run eject

配置路径别名@

在webpack.config中添加 , 即可完成路径别名的配置

 alias: {
        // Support React Native Web
        // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
        'react-native': 'react-native-web',
        // Allows for better profiling with ReactDevTools
        ...(isEnvProductionProfile && {
          'react-dom$': 'react-dom/profiling',
          'scheduler/tracing': 'scheduler/tracing-profiling',
        }),
        ...(modules.webpackAliases || {}),
        // 添加路径
        '@': path.resolve(__dirname, '../src')
      },

项目创建一个HelloWorld

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

learnReact.js

import React from "react";

// 创建一个名为LearnReact的React函数组件

export default function LearnRcact() {
    return (
        <div>
            <h1>Hello, world!66</h1>
            <p>This is a paragraph.</p>
        </div>
    )
}

什么是jsx?

设想 

const element = <h1>Hello, world!</h1>

他既不是html也不是字符串,他是什么呢?它被称为 JSX,是一个 JavaScript 的语法扩展。我们建议在 React 中配合使用 JSX,JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 可能会使人联想到模板语言,但它具有 JavaScript 的全部功能。

// 可以在变量后面直接跟html,但是注意不能换行
const jsx = <div></div>
      
// 如果想换行则可以加一个括号,注意只能有一个根元素
const jsx2 = (
  <div>
    <div>你好,jsx</div>
  </div>
)

// 在jsx中使用变量用 {} 括起来,里面就是我们在外部声明的变量
const hello = '你好'
const jsx3 = (
  <div>{hello}</div>
)


// 在jsx中做判断是否显示,一般用 三元运算
const is = true
const jsx5 = (
  <div>
    {is ? <div>你好,我显示了</div> : null}
    { is && <div>你好,我显示了</div> }
  </div>
)

jsx中使用css

import React, { Component } from 'react'
// import './learnReact.sass'
export default class LearnReact extends Component {
  render() {
    const is = true
    const hello = "helloworld~~!"
    return (
      <div>
        {
          is ? <div style={{ color: 'red' }}>{hello}</div> : null
        }
        {
          is && <div>{hello}</div>
        }
      </div>
    )
  }
}

react中的点击事件和数据的修改和存储数据一系列基础知识

import React, { Component } from 'react'
export default class onClickReact extends Component {
    constructor(props) {
        super();
        this.state = {
            number: 1,
            book: ['js', 'css', 'html']
        }
    }
    hello() {
        console.log(this);
    }
    add() {
        console.log(66666);
    }
    addNumber() {
        // 点击可以获取最新的值,jsx的回调函数
        this.setState({
            number: this.state.number + 1
        }, () => {
            console.log(this.state, '这个是最新的值');
        })
    }
    changeArrMessage() {
        this.setState(pre => ({
            // book: [...pre.book, 'react'] //展开往后面添加一条数据
            book: ['react']
        }))
    }
    render() {
        console.log(this);
        return (
            <div>
                {/* 普通点击事件 */}
                <div onClick={this.hello}>onClickReact</div>
                {/* 箭头函数点击事件 */}
                <div onClick={() => this.add()}>箭头函数点击事件</div>
                {/* 加法的点击事件 */}
                <button style={{ background: 'green', color: 'white' }} onClick={() => this.addNumber()}>点击会增加number的值</button>
                {/* number的值 */}
                <div>
                    {this.state.number}
                </div>

                {/* 下面这个是数组的值 */}
                <div onClick={() => this.changeArrMessage()}>
                    点击改变数组
                </div>
                <div>
                    666{this.state.book}
                </div>
                <hr />
                <div>
                    {this.state.book.map((item, index) => {
                        return <div style={{ margin: '10px' }} key={index}>
                            {item}
                        </div>
                    })}
                </div>
            </div>
        )
    }
}
import React, { Component } from 'react'
export default class variable extends Component {
    constructor(props) {
        super();
        this.state = {
            name: '张三',
            age: 18,
            sex: '男',
            show: false
        }
    }
    updateUserinfo() {
        this.setState({
            name: '李四',
            age: 20,
            sex: '女',
            show: true
        })
    }
    render() {
        return (
            <div>
                <div>
                    这是原来的: {this.state.name}---{this.state.age}---{this.state.sex} --{this.state.show ? '显示' : '不显示'}
                </div>
                <div>
                    <button onClick={() => this.updateUserinfo()}>点击修改之后的数据</button>
                </div>
                <div>
                    {this.state.show ? <div>这是修改之后的数据: {this.state.name}---{this.state.age}---{this.state.sex}</div> : ''}
                </div>
            </div>
        )
    }
}

react中的循环

import React, { Component } from 'react'
export default class mapElement extends Component {
    state = {
        infos: [
            {
                name: '张三',
                age: 18,
                sex: '男'
            },
            {
                name: '李四',
                age: 20,
                sex: '男'
            },
            {
                name: '王五',
                age: 22,
                sex: '男'
            }
        ]
    }
    render() {
        return (
            <div>{
                this.state.infos.map((item, index) => {
                    return <div key={index}>姓名:{item.name},年龄:{item.age},性别:{item.sex}</div>
                })}</div>
        )
    }
}

以上所有代码的效果图

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

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

相关文章

期末复习4---PTA之前题目复习

怎么在不能用strlen也就四没有string.h头文件的时候实现统计字符串的长度&#xff1f; 字符串的逆序&#xff08;看收藏里面的题&#xff09; #include <stdio.h> void f(char *p);int main() {char s[1000];gets(s);f(s);printf("%s",s);return 0; }void f(…

为啥影像导入GIS后,颜色会变?两个方法解决它!

不知道你有没有遇到过这种情况&#xff0c; 影像的正常颜色是这样的—— 可是导入到GIS后&#xff0c; 颜色竟然变了&#xff0c; 而且变得很奇怪—— 你也不必惊讶&#xff0c; 极大概率是因为数据源类型没有正确识别&#xff0c; 有两个方法可以解决这个问题—— 方法一…

告别Proteus,拥抱SmartEDA:电路设计新纪元,效率飞跃不是梦!

在数字化浪潮席卷而来的今天&#xff0c;电路设计行业也迎来了前所未有的变革。曾经&#xff0c;Proteus以其稳定可靠的性能&#xff0c;赢得了众多电路设计工程师的青睐。然而&#xff0c;随着技术的不断进步和市场的快速变化&#xff0c;我们需要一款更加高效、智能的工具来应…

苹果一夜间重塑iPhone!GPT-4o赋能Siri,AI深入所有应用,库克:开启苹果AI新时代

千呼万唤&#xff0c;苹果如何用AI重塑iPhone&#xff0c;答案终于揭晓&#xff01; 各种令人激动的传闻&#xff0c;通通都是真的—— 苹果确定与OpenAI达成合作&#xff0c;接入ChatGPT&#xff0c;使用GPT-4o模型。 GPT-4o深夜发布&#xff01;Plus免费可用&#xff01;http…

工业4.0下的PLC进化论:ARMxy计算机如何重塑自动化

智能物流系统的高效与精准成为企业竞争力的关键。在这个背景下&#xff0c;传统的PLC系统因其固有的局限性&#xff0c;如扩展性差、系统封闭等&#xff0c;开始显得力不从心。ARMxy工业计算机作为新一代的PLC替代方案&#xff0c;凭借其低功耗、高性能以及高度的灵活性&#x…

使用LangChain与ChatGLM实现本地知识库(一)

前言 本篇主要内容为介绍ChatGLM3的安装使用&#xff0c;后续才会涉及到使用LangChain实现本地知识库的内容&#xff1b; ChatGLM为智谱与清华大学开源的一个大语言模型&#xff0c;支持多轮对话、内容创作等&#xff0c;ChatGLM3-6B为ChatGLM3系列中门槛相对较低的一个&…

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代&#xff0c;抖音小店以其独特的平台优势和庞大的用户基础&#xff0c;吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一&#xff0c;它的抖音小店究竟靠不靠谱呢&#xff1f;今天&#xff0c;我们就来一起揭开这个谜底。 首…

vue实现拖拽元素;vuedraggable拖拽插件

效果图&#xff1a; 中文文档 以下代码可直接复制使用 安装依赖 npm i -S vuedraggable使用 <template><div class"container"><div>使用flex竖轴布局 <br>handle".mover" 可拖拽的class类名 <br>filter".forbid&qu…

解析ISP许可证:构建安全可靠的网络空间

在当今数字化时代&#xff0c;互联网已成为人们生活和工作中不可或缺的一部分。作为连接世界的纽带&#xff0c;互联网服务提供商&#xff08;ISP&#xff09;承担着重要的责任&#xff0c;为用户提供稳定、高效的网络接入和服务。而ISP许可证&#xff0c;则是保障这些服务合法…

SmartEDA:革新教育电路,点亮学生创新之光!

在当今快速发展的科技时代&#xff0c;电路设计与电子技术的融合已成为教育领域不可或缺的一部分。而SmartEDA作为一款新兴的电路设计工具&#xff0c;正以其独特的优势助力学生创新实践&#xff0c;引领教育界迈向更加智能化的未来。 SmartEDA不仅具备传统电路设计软件的基本…

maven在setting.xml配置文件中限制某个包不走某个镜像的配置案例

一、以阿里云镜像为例 1、验证示例&#xff0c;在 ideal 项目的父 pom.xml 文件中&#xff0c;配置了如下指定镜像 <repositories><repository><id>osgeo</id><url>https://repo.osgeo.org/repository/release/</url><snapshots>&l…

知识管理与集体创新——从企业到新型研发机构的实践与思考︱PMO大会

全国PMO专业人士年度盛会 鹏城实验室人力资源处人才发展主管&#xff0c;原华为供应链管理部知识管理负责人王万翎女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“知识管理与集体创新——从企业到新型研发机构的实践与思考”。大会将于6月29-…

72V降3.3V1A降压恒压WT6039

72V降3.3V1A降压恒压WT6039 WT6039是设计用于满足宽电压输入需求的一款高效DC-DC降压转换器芯片&#xff0c;它被优化以在12V到90V的宽电压范围内操作。该器件整合了多种功能&#xff0c;包括使能开关控制、精准的参考电源提供、误差放大器、以及为安全性能考虑的过热保护、限…

关于物料字段的前导零问题

一个需要CALL FUNCTION 一个可以直接用ALPHA&#xff0c;如果对物料用ALPHA的话&#xff0c;会导致将物料的前导零补成40位&#xff0c;导致问题出现。

小魔推-短视频矩阵批量创作一键分发同城引流工具

​小魔推是一款短视频营销裂变推广工具&#xff0c;主要服务于想做短视频营销的实体商家&#xff0c;通过BGC、PGC、UGC的打造帮助商家实现流量裂变与转化。 其中&#xff0c;小魔推AI矩阵营销是借助AI技术帮助企业/商家搭建营销矩阵&#xff0c;让商家拥有足够多的账号、足够…

在windows10 安装子系统linux(WSL安装方式)

在 windows 10 平台采用了WSL安装方式安装linux子系统 1 查找自己想要安装的linux子系统 wsl --list --online 2 在线安装 个人用Debian比较多&#xff0c;这里选择Debian&#xff0c;如下图&#xff1a; wsl --install -d Debian 安装过程中有一步要求输入用户名与密码&…

shell编程(四)—— 运算符

和其他编程语言一样&#xff0c;bash也有多种类型的运算符&#xff0c;本篇对bash的相关运算符做简单介绍。 一、运算符 1.1 算术运算符 常见的算术运算符&#xff0c;如加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xf…

qemu创建kvm虚拟机-x86模拟arm

1、虚拟机环境 虚拟机ubuntu22.042、下载需要的依赖 apt install openssh-server net-tools vim -yapt install qemu qemu-kvm qemu-system-arm bridge-utils uml-utilities qemu-efi-aarch64 cloud-image-utils -y#查看版本 qemu-img -V(1) 下载uefi固件 cd /optwget https…

RERCS系统开发实战案例-Part02 创建BOPF对应的业务对象(Business Object)

1、通过事务码 BOBF创建业务对象 2、输入debug&#xff0c;进入编辑模式新建BO对象&#xff1b; 选择对应的BO对象属性类别&#xff1a; 3、激活BO对象 接口页签&#xff1a; 属性页签&#xff1a;自动带出标准的常量 改接口类部分源码&#xff1a; 4、BO对象Node Elemen…

精酿啤酒未来市场的发展

当我们深入探讨中国啤酒产业时&#xff0c;不难发现这是一个既传统又充满创新活力的领域。特别是近年来&#xff0c;随着消费者对品质生活的追求和口味的多样化&#xff0c;精酿啤酒这一细分市场逐渐崭露头角&#xff0c;吸引了众多创业者的目光。 在中国&#xff0c;啤酒行业早…