一、React基础知识

这篇具有很好参考价值的文章主要介绍了一、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对象当作变量使用在标签的括号中

import React from 'react'
import ReactDOM from 'react-dom/client'

let com = <div>
  <h1>这是纯组件部分呀</h1>
  <div>纯组件</div>
  <div>函数组件</div>
  <div>类组件</div>
</div>
//render里面写入com这个jsx对象,即可将其里面的元素展现到页面中去
ReactDOM.createRoot(document.getElementById('root')).render(com)

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

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

ReactDOM.createRoot(document.getElementById('root')).render(Hanshu())

        1.3:通过类来创建组件:

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

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

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

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

        (2:对象数组成员访问

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

        (3:js运算表达式

import { useState } from 'react'
import './test.css'
function test() {
    let isout = "yes"
    let count = 22
    // 定义一个变量marry
    let ismarry = true
    return (
        <div className=''>
            {/*相当于vue中的v-fi: 如果isout的结果为yes,则显示”不出去了吧“,否则显示”出去呀,散步不“ */}
            <div>{(isout === "yes") ? "不出去了吧" : "出去呀,散步不"}</div>

            {/* 可以将前面的变量进行加减乘除计算 */}
            <div>count+21的结果为{count + 21}</div>

            {/* 判断marry是否为true满足则显示后面的”已经结婚了哦“信息 ,判断为false则不显示*/}
            <div>{ismarry && "逻辑与的部分"}</div>

            {/* 若marry判断为false,则显示后面的语句,若为true则显示前面的语句 */}
            <div>{ismarry || "逻辑或的部分"}</div>
        </div>
    )
}
export default test

        (4:函数调用

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

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

import { useState } from 'react'
import './test.css'
function test() {
    // 定义一个jsx对象,包含了多个元素的div标签()h1,h2,h3,p标签
    // 可以将jsx对象当作变量使用在标签的括号中
    let jsxobj = <div>
        <h1>hello</h1>
        <h2>你好</h2>
        <h3>晚上老好了</h3>
        <p>嘿嘿黑</p>
    </div>
    return (
        // 将jsxobj这个对象显示到页面中去
        <div className='fa'>{jsxobj}</div>

    )
}
export default test

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

                (6.1:数据循环渲染

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

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

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

    )
}
export default test

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

import { useState } from 'react'
function test() {
    // 定义一个函数dianj(没传参数)
    function dianji() {
        console.log("触发了点击事件");
    }
    function canshu() {
        console.log("触发了传递参数的函数");
    }
    return (
        <div>
            {/* 点击事件操作的函数不能加括号,加了括号是不用点击就立即执行 */}
            <div className="box" onClick={dianji}>点击打印</div>
            <button onClick={canshu}>传参数事件</button>
        </div>
    )
}
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中引入作为全局样式

/*.index.css文件中为 全局样式 */
.name {
  width: 100px;
  height: 100px;
  border: 1px solid black;
}

//app.jsx文件中

import { useState } from 'react'
// 引入组件Box
import Box from './jubu.jsx'
function App() {
  return (
    <div>
      <div className='name'>全局样式</div>
      <Box></Box>
    </div>
  )
}

export default App

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

//jubu.jsx文件中

import { useState } from 'react'
// 引入局部样式
import yangshi from './jubu.module.css'
function jubu() {
    return (
        <div className={yangshi.name}>局部样式的效果</div>
    )
}
export default jubu


//jubu.module.css文件中
/* 局部样式 */
.name {
    width: 100px;
    height: 50px;
    background-color: yellow;
    border-radius: 10px;
}

                (6.3.3:src和href:绑定的是一个地址或网址文章来源地址https://www.toymoban.com/news/detail-738063.html

import { useState } from 'react'
function test() {
    // 点击跳转到百度首页
    let tiaozhuan = "https://www.baidu.com"
    // 图片显示的网络地址,也可以是本地地址
    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"
    return (
        <div>
            <a href={tiaozhuan}>点击跳转到百度首页</a>
            <img src={tupian} alt="" />
        </div>
    )
}

export default test

到了这里,关于一、React基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端知识】React 基础巩固(二十八)——StrictMode

    StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样,StrictMode 不会渲染任何可见的 UI 为后代出发额外的检测和警告 严格模式检查仅在开发模式下运行,不影响生产构建 严格模式检查什么? 识别不安全的生命周期 使用过时的 ref API 检查意外的副作用 组件

    2024年02月16日
    浏览(43)
  • 【前端知识】React 基础巩固(三十九)——React-Router的基本使用

    Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号) 尝试在项目中使用HashRouter: 安装Router 在 index.js 中引入并使用HashRouter Routes:包裹所有的Route,在其中匹配一个路由(

    2024年02月14日
    浏览(55)
  • 【前端知识】React基础巩固(二)——JSX注意点

    createElement存在的问题: 繁琐不简洁 不直观,无法一眼看出所描述的结构 不优雅,开发体验不好 JSX 简介:JSX 是 JavaScript XML 的简写,表示了在JS代码中写XML(HTML)格式的代码 优势:声明式语法更加直观,与HTML结构相同,降低学习成本,提高开发效率 JSX 是 react 的核心内容‘

    2024年02月09日
    浏览(64)
  • 【前端知识】React 基础巩固(二十九)——过渡动画 react-transition-group

    react-transition-group 包含: Transition(该组件是一个和平台无关的组件,不一定结合 CSS) CSSTransition(通常使用此组件实现过渡动画效果) SwitchTransition(两个组件显示/隐藏切换时使用) TransitionGroup(将多个动画包裹其中,一般用于列表中元素的动画) CSSTransition CSSTransition 基于

    2024年02月16日
    浏览(61)
  • 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

    Redux Tool Kit (RTK)是官方推荐的编写Redux逻辑的方法,旨在成为编写Redux逻辑的标准方式,从而解决上面提到的问题。 RTK的核心API主要有如下几个: configureStore:包装createStore以提供简化的配置选项和良好的默认值。它可以自动组合你的slice reducer,添加你提供的任何Redux中间件

    2024年02月15日
    浏览(59)
  • 【前端知识】React 基础巩固(十九)——组件化开发(三)

    Main.jsx TabControl/index.jsx TabControl/style.css

    2024年02月13日
    浏览(47)
  • 【前端知识】React 基础巩固(二十六)——Portals 的使用

    通常,组件会渲染到 root 节点下。可使用 Portals 将组件渲染至其他节点。 添加 id 为 more、modal 的 div 元素 构建 Modal.jsx, 通过 createPortal 把组件渲染到指定的 modal 节点下 构建 App.jsx 查看渲染结果

    2024年02月16日
    浏览(42)
  • 【前端知识】React 基础巩固(四十三)——Effect Hook

    Effect Hook 用来完成一些类似class中生命周期的功能。 在使用类组件时,不管是渲染、网路请求还是操作DOM,其逻辑和代码是杂糅在一起的。例如我们希望把计数器结果显示在标签上,在类组件中,我们通过生命周期进行实现,如下所示: 在函数组件中,我们可以利用useEffec

    2024年02月14日
    浏览(62)
  • 【前端知识】React 基础巩固(十七)——组件化开发(一)

    什么是组件化开发? 分而治之的思想 将一个页面拆分成一个个小的功能块 将应用抽象成一颗组件树 React的组件相对于Vue更加的灵活和多样 按照不同的方式可以分为很多类组件 根据 组件的定义方式 ,分为: 函数组件 、 类组件 根据 组件内部是否有状态需要维护 ,分为:

    2024年02月12日
    浏览(61)
  • 【前端知识】React 基础巩固(三十一)——Redux的简介

    概念 纯函数(确定的输入一定产生确定的输出,函数在执行过程中不产生副作用): 在程序设计中,若一个函数符合以下条件,那么这个函数就被称为纯函数 此函数在相同的输入值时,需产生相同的输出 函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包