• 一、React基础知识


    一、环境安装

            第一种:使用原生搭建(可以从国内下载配置镜像、也可以从国外下载)

                            指令:1.国内下载:(1:npm config set registry https://r.npm.taobao.org//

                                                            (2:npm install -g create-react-app:全局安装react脚手架

                                                            (3:create-react-app 项目名:创建项目 

                                                            (4:cd  项目名:进入项目

                                                            (5:npm run start:启动项目

                                    2.国外下载:执行(2-(5步骤即可,下载速度较慢

            第二种方式:用vite搭建脚手架(速度较快,建议使用)

                    指令:(1.npm init vite@latest:初始化一个新项目

                            (2:编辑项目名,选择react,选择javascript、tscript等等,按需求选择

                            (3:cd 项目名:进入该项目

                            (4:npm init:初始化一个新的 Node.js 项目

                              (5:npm run dev:启动项目

    二、JSX相关语法

    src文件夹下的main.jsx文件:是整个项目的入口文件,不可移除,其他的按自己需求保留

    JSX:完整写法:JavaScript XML(标记语言):通俗的讲是js语言里面可以插入标签

            XML和HTML的区别:前者不能直接引入外部文件,后者可以引入外部文件(js、ts、css等)

    1.组件,创建组件可以分为三种:纯组件、函数组件、类组件

            1.1:纯组件:通过创建jsx对象,包含了多个元素的div标签(三个div标签)。可以将jsx对象当作变量使用在标签的括号中

    1. import React from 'react'
    2. import ReactDOM from 'react-dom/client'
    3. let com = <div>
    4. <h1>这是纯组件部分呀</h1>
    5. <div>纯组件</div>
    6. <div>函数组件</div>
    7. <div>类组件</div>
    8. </div>
    9. //render里面写入com这个jsx对象,即可将其里面的元素展现到页面中去
    10. ReactDOM.createRoot(document.getElementById('root')).render(com)

            1.2:函数组件:通过声明一个函数来创建组件

    1. import React from 'react'
    2. import ReactDOM from 'react-dom/client'
    3. // 声明一个函数
    4. function Hanshu(ARG) {
    5. return <div>
    6. <h1>这是通过函数来创建的组件呀</h1>
    7. <div>在main.jsx文件里面操作的嘞</div>
    8. </div>
    9. }
    10. // 11行和12行以及render中的Hanshu()等价
    11. let res = <Hanshu></Hanshu>
    12. let res2 = Hanshu()
    13. ReactDOM.createRoot(document.getElementById('root')).render(Hanshu())

            1.3:通过类来创建组件:

    1. import React from 'react'
    2. import ReactDOM from 'react-dom/client'
    3. //创建一个Type类并继承React的组件部分,是为了继承它的响应式数据功能
    4. class Type extends React.Component {
    5. render() {
    6. return <div>
    7. <h1>这是通过class类来创建的组件呀</h1>
    8. <div>嘿嘿黑</div>
    9. </div>
    10. }
    11. }
    12. // 只能通过这个来实现咯
    13. let res = <Type></Type>
    14. ReactDOM.createRoot(document.getElementById('root')).render(res)

    2.jsx插值表达式的使用途径

            (1:变量:直接当作变量通过{}来使用

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. // 当作变量来使用
    5. let bianliang = 120
    6. let arr = ["box1", "box2", "jack", "22岁了", "今天是他生日哦"]
    7. let obj = { name: "小红", age: "22", sex: "女", job: "student" }
    8. return (
    9. <div className=''>
    10. <div>变量使用::{bianliang}</div>
    11. <div>访问数组中的成员::{arr[4]}</div>
    12. <div>访问对象中的成员::{obj.name}</div>
    13. </div>
    14. )
    15. }
    16. export default test

            (2:对象数组成员访问

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. let arr = ["box1", "box2", "jack", "22岁了", "今天是他生日哦"]
    5. let obj = { name: "小红", age: "22", sex: "女", job: "student" }
    6. return (
    7. <div className=''>
    8. <div>访问数组中的成员::{arr[4]}</div>
    9. <div>访问对象中的成员::{obj.name}</div>
    10. </div>
    11. )
    12. }
    13. export default test

            (3:js运算表达式

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. let isout = "yes"
    5. let count = 22
    6. // 定义一个变量marry
    7. let ismarry = true
    8. return (
    9. <div className=''>
    10. {/*相当于vue中的v-fi: 如果isout的结果为yes,则显示”不出去了吧“,否则显示”出去呀,散步不“ */}
    11. <div>{(isout === "yes") ? "不出去了吧" : "出去呀,散步不"}</div>
    12. {/* 可以将前面的变量进行加减乘除计算 */}
    13. <div>count+21的结果为{count + 21}</div>
    14. {/* 判断marry是否为true满足则显示后面的”已经结婚了哦“信息 ,判断为false则不显示*/}
    15. <div>{ismarry && "逻辑与的部分"}</div>
    16. {/* 若marry判断为false,则显示后面的语句,若为true则显示前面的语句 */}
    17. <div>{ismarry || "逻辑或的部分"}</div>
    18. </div>
    19. )
    20. }
    21. export default test

            (4:函数调用

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. function diaoyong() {
    5. console.log("调用了函数名为diaoyong");
    6. }
    7. return (
    8. // 直接在标签中将diaoyong函数当作变量使用
    9. <div className='fa'>111{diaoyong()}</div>
    10. )
    11. }
    12. export default test

            (5:jsx对象(给变量赋标签组件)

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. // 定义一个jsx对象,包含了多个元素的div标签()h1,h2,h3,p标签
    5. // 可以将jsx对象当作变量使用在标签的括号中
    6. let jsxobj = <div>
    7. <h1>hello</h1>
    8. <h2>你好</h2>
    9. <h3>晚上老好了</h3>
    10. <p>嘿嘿黑</p>
    11. </div>
    12. return (
    13. // 将jsxobj这个对象显示到页面中去
    14. <div className='fa'>{jsxobj}</div>
    15. )
    16. }
    17. export default test

            (6:插值{}可以使用途径

                    (6.1:数据循环渲染

    1. import { useState } from 'react'
    2. function test() {
    3. // 想要将arr数组里面的元素遍历装到a标签中去
    4. // 第一种写法,使用for循环将其取到的元素当作变量放到dive标签中去,再将遍历的得到的div标签添加到新的数组中去
    5. let arr = ["你好", "react", "很高兴认识您", "我相信接下来的时间", "我们会相处的很愉快的"]
    6. let newarr = []
    7. for (let i = 0; i < arr.length; i++) {
    8. newarr.push(<div key={i}>{arr[i]}</div>)
    9. }
    10. return (
    11. <div>
    12. {newarr}
    13. {/* 第二种(最常用):直接在标签中使用map函数 ,将各个元素取出来放到div标签中当作变量使用*/}
    14. <div >{arr.map((el, index) => <div key={index}>{el}</div>)}</div>
    15. </div>
    16. )
    17. }
    18. export default test

    小案例:数组中的元素是对象,将每个元素都显示在页面上

    1. import { useState } from 'react'
    2. import './test.css'
    3. function test() {
    4. // 将数组arr里面的数据取出来展现到页面上
    5. let arr = [{ title: "电脑", discrbe: "真的不错", price: "1231元", location: "四川", comment: "发货快,是正品,下次还来" },
    6. { title: "手机", discrbe: "正品直发", price: "2313元", location: "广东" },
    7. { title: "电话手表", discrbe: "可以聊天的神奇软件", price: "1231元", location: "广东" }]
    8. return (
    9. // 用map函数将arr里面的元素取出来,然后通过点语法来取元素中的对象
    10. <div className='fa'>{arr.map((el, index) => <div className='big' key={index}>
    11. <h4>{el.title}</h4>
    12. <div>{el.discrbe}</div>
    13. <div>{el.price}</div>
    14. <div>{el.comment}</div>
    15. </div>)}
    16. </div>
    17. )
    18. }
    19. export default test

                    (6.2:标签事件(以点击事件为例)

    1. import { useState } from 'react'
    2. function test() {
    3. // 定义一个函数dianj(没传参数)
    4. function dianji() {
    5. console.log("触发了点击事件");
    6. }
    7. function canshu() {
    8. console.log("触发了传递参数的函数");
    9. }
    10. return (
    11. <div>
    12. {/* 点击事件操作的函数不能加括号,加了括号是不用点击就立即执行 */}
    13. <div className="box" onClick={dianji}>点击打印</div>
    14. <button onClick={canshu}>传参数事件</button>
    15. </div>
    16. )
    17. }
    18. export default test
                    (6.3:标签的属性(className,style,src,href.....)

                     (6.3.1:className:     

                          若只想一个类名需要在前面声明一个对象obj={one1:”one“,one2:"two",one3:"three"}

                                    格式:className={obj.one1}

                            若想要给一个标签多个类名可以声明一个数组变量arr=【box1,box2,box3】

                                           className={arr.join(' ')}

                                    也可以直接claName={【box1,box2,box3,box4】.join(' ')}

                    (6.3.2:style:分为全局样式和局部样式

                            全局样式可以直接在main.jsx中引入作为全局样式

    1. /*.index.css文件中为 全局样式 */
    2. .name {
    3. width: 100px;
    4. height: 100px;
    5. border: 1px solid black;
    6. }
    7. //app.jsx文件中
    8. import { useState } from 'react'
    9. // 引入组件Box
    10. import Box from './jubu.jsx'
    11. function App() {
    12. return (
    13. <div>
    14. <div className='name'>全局样式</div>
    15. <Box></Box>
    16. </div>
    17. )
    18. }
    19. export default App

                            局部样式:当项目中有几个组件,组件中的类名重复时,则显示的是后面执行的那个样式,若想要显示各自的样式,需要将各自的样式设置为局部样式(样式文件后缀名修改为module.css),引入的方式必须为图中的格式来引入(第四行),使用必须使用点语法加类名来使用

    1. //jubu.jsx文件中
    2. import { useState } from 'react'
    3. // 引入局部样式
    4. import yangshi from './jubu.module.css'
    5. function jubu() {
    6. return (
    7. <div className={yangshi.name}>局部样式的效果</div>
    8. )
    9. }
    10. export default jubu
    11. //jubu.module.css文件中
    12. /* 局部样式 */
    13. .name {
    14. width: 100px;
    15. height: 50px;
    16. background-color: yellow;
    17. border-radius: 10px;
    18. }

                    (6.3.3:src和href:绑定的是一个地址或网址

    1. import { useState } from 'react'
    2. function test() {
    3. // 点击跳转到百度首页
    4. let tiaozhuan = "https://www.baidu.com"
    5. // 图片显示的网络地址,也可以是本地地址
    6. let tupian = "https://tse1-mm.cn.bing.net/th/id/OIP-C.De4iKAMeTvWwPQxXNK74ZgHaE8?w=281&h=187&c=7&r=0&o=5&pid=1.7"
    7. return (
    8. <div>
    9. <a href={tiaozhuan}>点击跳转到百度首页</a>
    10. <img src={tupian} alt="" />
    11. </div>
    12. )
    13. }
    14. export default test

  • 相关阅读:
    pytorch学习笔记4
    Linux常用命令
    【Vue-Element-Admin】table排序
    计算机毕业设计Java高校就业服务网站(源码+系统+mysql数据库+lw文档)
    浅谈智能安全配电装置应用在银行配电系统中
    数据结构从入门到实战——顺序表的应用
    grafana面板介绍
    【前端学习】—判断成立(十二)
    Redis数据库
    C++实现四叉树索引
  • 原文地址:https://blog.csdn.net/weixin_68211919/article/details/134158174