当前位置: 首页 > news >正文

React环境搭建及语法简介

React 是目前最流行的前端框架之一,其核心是组件化开发和虚拟 DOM。以下从基础语法到高级特性,为你提供系统化的学习路径和代码示例。

一、基础环境搭建

首先需要安装 Node.js(包含 npm 或 yarn),然后创建 React 项目:

# 使用 create-react-app 脚手架
npx create-react-app my-react-app
cd my-react-app
npm start  # 启动开发服务器

二、核心语法与概念

1. 组件定义

React 组件分为函数组件类组件,推荐使用函数组件(更简洁,配合 Hooks)。

// 函数组件(推荐)
const Welcome = (props) => {return <h1>Hello, {props.name}</h1>;
};// 类组件(旧写法)
class Welcome extends React.Component {render() {return <h1>Hello, {this.props.name}</h1>;}
}
2. JSX 语法

JSX 是 JavaScript 的语法扩展,用于描述 UI 结构:

const element = (<div className="container"><h1>Hello, JSX!</h1><p>{1 + 2}</p>  {/* 嵌入表达式 */}{true && <p>条件渲染</p>}</div>
);
  • 注意
    • 类名使用 className 而非 class
    • 标签必须闭合(如 <img />
    • 支持表达式嵌入 {}
3. 状态管理(State)

使用 useState Hook 管理组件内部状态:

import { useState } from 'react';const Counter = () => {const [count, setCount] = useState(0);  // 初始化状态return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
};
4. 生命周期(Hooks 版)

useEffect 替代类组件的 componentDidMountcomponentDidUpdatecomponentWillUnmount

import { useEffect, useState } from 'react';const Example = () => {const [data, setData] = useState(null);useEffect(() => {// 组件挂载后执行(类似 componentDidMount)fetchData();// 清理函数(类似 componentWillUnmount)return () => {// 资源清理逻辑};}, []);  // 空依赖数组表示只执行一次return <div>{data}</div>;
};
5. 组件通信
  • 父→子:通过 props 传递数据
  • 子→父:通过回调函数传递数据
// 父组件
const Parent = () => {const [message, setMessage] = useState('');const handleChildClick = (newMessage) => {setMessage(newMessage);};return (<div><Child onButtonClick={handleChildClick} /><p>Received: {message}</p></div>);
};// 子组件
const Child = (props) => {return (<button onClick={() => props.onButtonClick('Hello from child')}>Send Message</button>);
};

三、高级特性

1. 条件渲染
const UserGreeting = ({ isLoggedIn }) => {return isLoggedIn ? (<p>Welcome back!</p>) : (<p>Please log in.</p>);
};
2. 列表渲染

使用 .map() 方法渲染列表,注意添加唯一 key

const TodoList = ({ todos }) => {return (<ul>{todos.map(todo => (<li key={todo.id}>{todo.text}</li>))}</ul>);
};
3. 自定义 Hooks

提取可复用的逻辑:

// useFetch.js
import { useState, useEffect } from 'react';const useFetch = (url) => {const [data, setData] = useState(null);const [loading, setLoading] = useState(true);useEffect(() => {fetch(url).then(res => res.json()).then(data => {setData(data);setLoading(false);});}, [url]);return { data, loading };
};// 使用自定义 Hook
const PostList = () => {const { data, loading } = useFetch('https://api.example.com/posts');if (loading) return <p>Loading...</p>;return <div>{data.map(post => <p key={post.id}>{post.title}</p>)}</div>;
};
4. Context API

跨层级传递数据(替代层层传递 props):

// 创建 Context
const ThemeContext = React.createContext();// 提供者组件
const App = () => {const theme = 'dark';return (<ThemeContext.Provider value={theme}><Toolbar /></ThemeContext.Provider>);
};// 深层组件使用
const Toolbar = () => {return (<div><ThemedButton /></div>);
};const ThemedButton = () => {const theme = useContext(ThemeContext);  // 使用 useContext Hookreturn <button style={{ background: theme }}>Themed Button</button>;
};

四、实践建议

  1. 官方文档:精读 React 官方文档,尤其是 Hooks 部分
  2. 练习项目
    • Todo List 应用(基础状态管理)
    • 博客评论系统(组件通信)
    • 天气查询应用(API 调用与 Context)
  3. 推荐工具
    • React DevTools(浏览器插件)
    • ESLint + Prettier(代码规范)
    • Vite(替代 Create React App,更快的构建工具)

需要我针对某个具体部分展开讲解或提供更多示例吗? 😊

http://www.lryc.cn/news/576368.html

相关文章:

  • Word之空白页删除2
  • 利用GPU加速TensorFlow
  • python多线程详细讲解
  • 【21】C9800配置PSK认证的WLAN
  • 多表连接查询:语法、注意事项与最佳实践
  • 【linux】Vm虚拟机ubuntu的接口ip掉了
  • 电商返利APP架构设计:如何基于Spring Cloud构建高并发佣金结算系统
  • 鸿蒙5:其他布局容器
  • 什么是 PoS(权益证明)
  • LIN总线通讯中的重要概念信号(Signal)、帧(Frame)和 节点(Node)
  • Geollama 辅助笔记:raw_to_prompt_strings_geo.py
  • 鸿蒙5:组件监听和部分状态管理V2
  • 设计模式精讲 Day 17:中介者模式(Mediator Pattern)
  • ASProxy64.dll导致jetbrains家的IDE都无法打开。
  • 医疗标准集中标准化存储与人工智能智能更新协同路径研究(上)
  • LabVIEW液压系统远程监控
  • uni-app subPackages 分包加载:优化应用性能的利器
  • 前端打印计算单位 cm、mm、px
  • 开源3D 动态银河系特效:Vue 与 THREE.JS 的奇幻之旅
  • 量子计算与 AI 的深度融合的发展观察
  • android14 设置下连续点击5次Settings标题跳转到拨号界面
  • 数字孪生技术赋能UI前端:实现虚拟与现实的无缝对接
  • Flutter基础(Future和async/await)
  • Gemini CLI 项目架构分析
  • 港澳地区,海外服务器ping通可能是地区运营商问题
  • ifconfig返回解析
  • Redis ①④-哨兵
  • Ubuntu20.04离线安装Realtek b852无线网卡驱动
  • HTML表格中<tfoot>标签用法详解
  • OD 算法题 B卷【计算误码率】