React基础

本文介绍了React的核心概念,如声明式编程、组件化和跨平台特性,以及如何结合react-router和redux进行应用架构。通过讲解JSX的基本使用、条件渲染、列表渲染和样式管理,展示如何利用这些技术高效开发用户界面。

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

React 是一个用于构建用户界面的 JavaScript 库,是 Facebook 开源的

可以理解它只负责 MVC 中的视图层渲染,不直接提供数据模型和控制器功能

react-router 实现路由,redux 实现状态管理,可以使用它们来构建一个完整应用

特点:

  • 声明式
  • 组件化
  • 跨平台编写

React 脚手架

方式一

全局安装 npm i create-react-app -g

创建项目 create-react-app 项目名称

启动项目 npm run start

方式二

npx create-react-app 项目名称

启动项目 npm start

基本使用

  • 导入 react 和 react-dom 两个包
  • 使用 react 创建 react 元素(虚拟DOM)
  • 使用 react-dom 渲染 react 元素
//  导包
import React from 'react';
import ReactDom from 'react-dom';

//  创建 react 元素
const div = React.createElement('div', { id: 'el' }, 'Hello React');

//  渲染 react 元素
ReactDom.render(div, document.getElementById('root'));

JSX 

JavaScript  XML 的简写,表示了在 JavaScript 中书写 XML 格式的代码。它是 React 的核心内容,可以让我们在 React 中创建元素更加简单,更加直观,提高开发效率

基本使用

//  导包
import React from "react";
import ReactDOM from "react-dom";

//  创建
const div = (
  <div className='box'>
    <h1>JSX</h1>
    <ul>
      <li>abc</li>
      <li>opq</li>
      <li>xyz</li>
    </ul>
  </div>
)

//  渲染
ReactDOM.render(div,document.getElementById('root'))

语法:

  • 使用 {变量/表达式} 渲染数据
  • 对象不能直接渲染,因为对象不可以作为 react 元素
  • 布尔值渲染不出来, 但作为判断有效
  • 双标签必须闭合
  • 注释写法  {/* 注释内容 */}
  • 一些标签的属性发送变化, class 变成 className , label 的 for 属性 变成 htmlFor
  • 多个单词组成的属性要变成驼峰命名
  • 标签的嵌套一定符合严格语法要求
  • 属性绑定  <标签  属性={变量} 属性={'字符串'+变量}>
  • 一个 JSX 片段建议使用圆括号包裹 ()
  • 一个 JSX 片段必须只有一个根标签

根标签可以用 <>空标签包裹元素</>

也可以用 <React.Fragment>包裹元素</React.Fragement>

JSX 条件渲染

if/else 条件渲染

const loading = true;

const getContent = () => {
  if (loading) {
    return <div>正在加载...</div>;
  } else {
    return <div>数据加载完毕,这是显示数据</div>;
  }
};

const div = <div>{getContent()}</div>;

三元表达式

const loading = true;

const div = (
  <div>
    {loading ? <div>正在加载...</div> : <div>数据加载完毕,这是显示数据</div>}
  </div>
);

逻辑运算

const loading = true;

const div = (
  <div>
    {loading && <div>正在加载...</div>}
    {loading || <div>数据加载完毕,这是显示数据</div>}
  </div>
);

JSX 列表渲染

const list = ['zhangsan', 'lisi', 'wangwu'];

const div = (
  <ul>
    {list.map((item,index) => (
      <li key={index}>{item}</li>
    ))}
  </ul>
);

//  key={唯一标识}

JSX 样式 - style

  • style 接受一个采用小驼峰命名属性的 JavaScript 对象,而不是 CSS 字符串
  • style 中的 key 采用小驼峰命名是为了与 JS 访问 DOM 节点的属性保持一致
  • React 会自动添加 ”px” 后缀到内联样式为数字的属性后,其他单位需要手动添加

JSX 样式 - className

  • className 设置类名,和 class 属性要求一样只能是字符串
  • 如果需要根据数据设置类名,可以使用 {} 嵌入 JS 表达式实现

JSX 样式 - 动态className

  • 在使用 className 的时候遇见多个类名动态绑定,可以模仿 vue 使用对象的方式
  • vue 中绑定类名的时候使用 {类名:布尔} 用布尔值决定是否加上这个类名

JSX 样式 - classNames

安装包  yarn add classnames

导入  import  classNames  from  'classnames'

使用字符串

classNames('aaa', 'bbb')   // aaa  bbb

使用对象

classNames({ aaa: true, bbb: true })   // aaa  bbb

使用数组

classNames(['aaa', bbb'])   // aaa  bbb

混合使用

classNames('aaa', { bbb: true })  // aaa  bbb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值