react环境

文章详细介绍了React的环境安装,包括vite集成和官方脚手架create-react-app的使用。接着阐述了React的特点,如声明式设计、高效性以及组件化。在基础语法部分,重点讲解了JSX的使用,组件的创建(类组件与函数组件),循环和条件渲染,以及如何通过useState实现响应式状态管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、React环境安装

1. vite集成

2. 官方脚手架

二、React特点

三、基础语法

1. JSX语法

2. 组件的写法——类组件/方法

3. 循环渲染

4. 条件渲染

5. css样式

 6. 响应式状态——useState


一、React环境安装

1. vite集成

npm init vite@latest==> 创建项目名==> 选react==> 选程序语言(js/ts)==> cd项目名称/项目目录下启动命令行(cmd)==> npm i ==> npm run dev

2. 官方脚手架

cnpm install -g create-react-app ==> create-react-app my-app(创建项目,应用名称不要有大写字母) ==> cd my-app(进入项目目录) ==> npm run start (启动项目) ==> npm run build (打包)

二、React特点

1. 优势:声明式设计

                高效——虚拟DOM、Diff算法

2. 灵活:可能性更多,可以自由组合

3. JSX

4. 组件:通过 React 构建组件,使得代码更加容易得到复用

三、基础语法

理解:ReactDOM.createRoot(document.getElementById("app")).render(<App/>)

ReactDOM对象,createRoot函数(获取元素),render函数(参数为App标签) 。App代表一个组件(函数、类),<App/>代表组件对象

知识点:render函数是官方自动调用的。

              getElementById是获取元素速度最快的方式

              复习:js中函数参数类型:数字、布尔值、字符串、对象、函数、null、undefined

但这里render函数的参数是一个标签,而js语法中不能用标签作为参数,所以出现了JSX语法

1. JSX语法

在react中,js中可以写标签,标签中可以写js。js语法遇到<>识别为标签,标签中遇到{} 就识别为js语法环境。但浏览器读不懂JSX语法,react打包时,加载器会把JSX语法翻译成js语法——jsx对象==>js对象(VNode虚拟节点对象)。

return的代码中能够嵌套多个 HTML 标签,但需要使用一个父元素标签包裹它们。

案例:

// main.jsx中
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(<App />);

// App.jsx中
import { Component } from "react";
// 类组件
export default class App extends Component {
  render() {
    let msg = "hello";
    function fn() {
      return 123;
    }
    return (
      <div>
        {msg}
        <p>{msg}</p>
        <span>{fn()}</span>
      </div>
    );
  }
}

除了类组件外,写成函数会更好。

import React from 'react'

export default function App() {
  let msg = 'test';
  return (
    <div>{ msg}</div>
  )
}

     

2. 组件的写法——类组件/方法

无论是类组件写法还是函数的写法,都可以使用快捷键来完成,但需要安装react相关插件。

rcc ==> react class component                                                     rcf ==> react function component

老版本中的函数组件——纯组件,不具备响应式。也就是说当更改数据时,页面中使用到该变量的地方不会跟着刷新。

import { Component } from "react";

export default class App extends Component {
  render() {
    let msg = "hello";
    function getmsg() {
      console.log('获取msg='+msg);
    }
    function setmsg() {
      msg = 'world';
      console.log("修改了msg");
    }
    return (
      <div>
        <p>{msg}</p>
        <button onClick={getmsg}>获取msg</button>
        <button onClick={setmsg}>修改msg</button>
      </div>
    );
  }
}

 通过上面的结果可以验证,当修改了msg后,控制台获取的msg已经由hello变为了world,但页面中显示的还是原始数据hello。

新版本(16.8后)的函数组件——可以使用官方API来让函数内部的变量成为一个响应式变量,解决了上面的问题,下面的知识点会讲解。

3. 循环渲染

因为react框架没有指令,所以条件渲染和循环渲染得自己利用逻辑来完成渲染。

如果插值表达式中,插入的是一个数组,react会将数组中的每个元素渲染到页面中。当直接将整个数组渲染到页面中时,可以看到数组中的元素并列展示在页面中;如果想要他们具有一定的样式,可以使用map方法,循环为每个元素都加上相同的样式。如下:

4. 条件渲染

react环境中的条件渲染,可以利用js语法中三目运算符,或者' || ' 或 ' && '来实现。这里需要复习一下或语法。

比如:A || B最终结果不一定只能是true或false,而是A/B表达式。当A为true时,结果为表达式A;A为false,结果为B表达式。

import React, { Component } from "react";

export default class App extends Component {
  render() {
    let flag = false;
    let flag1 = true;
    let a = "hello";
    let b = "world";
    let fn = (arg) => {
      return arg ? <a>aaa</a> : <b>bbb</b>;
    };
    return (
      <div>
        <h3>{flag ? a : b}</h3>
        <h3>{flag || a}</h3>
        <h3>{flag1 || a}</h3>
        <h3>{flag ? <a href="#">aaa</a> : <b>bbb</b>}</h3>
        <h3>{fn(true)}</h3>
      </div>
    );
  }
}

5. css样式

类为className,是为了和类class区分。css样式的引入可以使用行内样式,也可以是外联样式,只是外联样式可以是全局的,也可以是局部的。当引入局部样式时,css文件名的后缀为.module.css。

import React from 'react'
import box from './box.css'
import obj from "./box2.module.css";
// 外部引入时需要用变量来接收,obj为整个样式对象,通过点语法来选择想要用哪个样式
export default function App() {
  // js环境中使用小驼峰命名法
  let mystyle = { backgroundColor: 'pink', width: '100px', height: '100px' };
  let c = 'red';
  return (
    <div>
      <div style={mystyle}>行内样式</div>
      <div style={{ color: c }}>行内样式2</div>
      <div className='box'>
        外联全局样式
      </div>
      <div className={obj.box2}>
        外联局部样式
      </div>
    </div>
  );
}

 6. 响应式状态——useState

前面的2点中写了普通的数据,当我们变量时,页面并不会跟着刷新,所以需要使用官方提供的API来将数据变为响应式的,类似vue中的ref。

用法:arr只有两个元素,第一个为状态,第二个是函数,调用该函数,那传入的数据会去修改第一个元素并刷新页面。

import { useState } from "react";

export default function App() {
  let arr = useState("hello,xzq");
  let get = () => {
    console.log("查看", arr[0]);
  };
  function set() {
    // arr[0]='修改了数据'  只是修改了数据 但不会驱动页面刷新
    arr[1]("hi,qy");
    // arr[1]为函数,()为函数调用,hi,qy为修改过后的值
    console.log("修改", arr[0]);
  }
  return (
    <div>
      <h2>app页面</h2>
      <b>{arr[0]}</b>
      <button onClick={get}>get</button>
      <button onClick={set}>set</button>
    </div>
  );
}

上面的代码可以使用es6中的解构赋值来写,这样的写法更简洁、常用,结果还是一样的。

import { useState } from "react";

export default function App() {
  let [msg, setMsg] = useState("hello,xzq");
  let get = () => {
    console.log("查看", msg);
  };
  function set() {
    setMsg("修改了msg为world");
    console.log("修改", msg);
  }
  return (
    <div>
      <b>{msg}</b>
      <button onClick={get}>get</button>
      <button onClick={set}>set</button>
    </div>
  );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值