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

React学习教程,从入门到精通, React 入门指南:创建 React 应用程序的语法知识点(7)

React 入门指南:创建 React 应用程序的语法知识点


一、React 简介

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并开源。它采用组件化开发模式,使得代码更加模块化、可复用和易于维护。


二、创建 React 应用程序的步骤

1. 环境准备

在开始之前,确保你的开发环境已经安装了以下工具:

  • Node.js 和 npm:React 依赖于 Node.js 和 npm(Node 包管理器)。你可以从 Node.js 官网 下载并安装最新版本。
  • 代码编辑器:推荐使用 Visual Studio Code。

2. 使用 Create React App 快速创建项目

create-react-app 是一个官方提供的脚手架工具,可以快速搭建 React 项目结构。

# 使用 npx 创建一个名为 my-react-app 的 React 项目
npx create-react-app my-react-app# 进入项目目录
cd my-react-app# 启动开发服务器
npm start

执行上述命令后,浏览器会自动打开 http://localhost:3000/,显示默认的 React 欢迎页面。


三、React 语法知识点详解

1. JSX(JavaScript XML)

JSX 是一种 JavaScript 的语法扩展,允许在 JavaScript 代码中编写类似 HTML 的结构。它使得编写 React 组件更加直观。

示例:

const element = <h1>Hello, React!</h1>;

2. 组件(Components)

React 应用由组件构成。组件可以是函数组件或类组件。

a. 函数组件(Function Components)

函数组件是最简单的组件形式,接受 props 作为参数并返回 JSX。

示例:

import React from 'react';function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}export default Welcome;
b. 类组件(Class Components)

类组件使用 ES6 类语法,可以拥有状态(state)和生命周期方法。

示例:

import React, { Component } from 'react';class Welcome extends Component {render() {return <h1>Hello, {this.props.name}</h1>;}
}export default Welcome;

3. 状态(State)和属性(Props)

a. Props

props 是组件的输入,用于从父组件传递数据到子组件。

示例:

// 父组件
function App() {return <Welcome name="React" />;
}// 子组件
function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}
b. State

state 是组件内部的状态,用于管理可变化的数据。

示例:

import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}export default Counter;

4. 事件处理(Event Handling)

React 中处理事件与原生 JavaScript 类似,但使用驼峰命名法。

示例:

function ActionLink() {function handleClick(e) {e.preventDefault();console.log('The link was clicked.');}return (<a href="#" onClick={handleClick}>Click me</a>);
}

5. 生命周期方法(Lifecycle Methods)

类组件中有多个生命周期方法,用于在组件的不同阶段执行代码。函数组件中可以使用 Hooks 来实现类似的功能。

常用的生命周期方法:

  • componentDidMount():组件挂载后调用。
  • componentDidUpdate():组件更新后调用。
  • componentWillUnmount():组件卸载前调用。

示例:

class Timer extends React.Component {componentDidMount() {this.timerID = setInterval(() => this.tick(), 1000);}componentWillUnmount() {clearInterval(this.timerID);}tick() {console.log('Tick!');}render() {return <div>Timer is running</div>;}
}

6. Hooks

Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 功能。

a. useState

用于在函数组件中添加状态。

示例:

import React, { useState } from 'react';function Example() {const [count, setCount] = useState(0);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}
b. useEffect

用于在函数组件中执行副作用操作,如数据获取、订阅等。

示例:

import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {document.title = `You clicked ${count} times`;}, [count]);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}

7. 列表与 Keys

在 React 中渲染列表时,需要为每个元素提供一个唯一的 key 属性。

示例:

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) => (<li key={number.toString()}>{number}</li>
));function NumberList() {return <ul>{listItems}</ul>;
}

8. 条件渲染

根据状态或 props 渲染不同的内容。

示例:

function Greeting(props) {const isLoggedIn = props.isLoggedIn;if (isLoggedIn) {return <h1>Welcome back!</h1>;}return <h1>Please sign up.</h1>;
}

9. 表单处理

在 React 中,表单元素如 <input>, <textarea>, <select> 等可以通过受控组件(controlled components)进行管理。

示例:

import React, { useState } from 'react';function Form() {const [value, setValue] = useState('');const handleChange = (e) => {setValue(e.target.value);};const handleSubmit = (e) => {e.preventDefault();console.log('Submitted value:', value);};return (<form onSubmit={handleSubmit}><label>Name:<input type="text" value={value} onChange={handleChange} /></label><button type="submit">Submit</button></form>);
}

10. 路由(Routing)

使用 react-router-dom 实现页面导航。

安装:

npm install react-router-dom

示例:

import React from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';function Home() {return <h2>Home</h2>;
}function About() {return <h2>About</h2>;
}function App() {return (<Router><div><nav><ul><li><Link to="/">Home</Link></li><li><Link to="/about/">About</Link></li></ul></nav><Route path="/" exact component={Home} /><Route path="/about/" component={About} /></div></Router>);
}export default App;

四、详细案例代码:Todo List 应用

下面是一个简单的 Todo List 应用,涵盖了上述多个知识点,并附有详细注释。

1. 项目结构

my-react-app/
├── node_modules/
├── public/
├── src/
│   ├── components/
│   │   ├── TodoList.js
│   │   └── TodoItem.js
│   ├── App.js
│   ├── index.js
│   └── index.css
├── package.json
└── ...

2. index.js

// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);

3. App.js

// App.js
import React, { useState } from 'react';
import TodoList from './components/TodoList';
import TodoItem from './components/TodoItem';function App() {const [todos, setTodos] = useState([{ id: 1, text: 'Learn React', completed: false },{ id: 2, text: 'Build a Todo App', completed: false },]);const addTodo = (text) => {const newTodo = {id: todos.length + 1,text,completed: false,};setTodos([...todos, newTodo]);};const toggleTodo = (id) => {const updatedTodos = todos.map((todo) => {if (todo.id === id) {return { ...todo, completed: !todo.completed };}return todo;});setTodos(updatedTodos);};const deleteTodo = (id) => {const filteredTodos = todos.filter((todo) => todo.id !== id);setTodos(filteredTodos);};return (<div className="App"><h1>My Todo List</h1><TodoList todos={todos} toggleTodo={toggleTodo} deleteTodo={deleteTodo} /><TodoItem addTodo={addTodo} /></div>);
}export default App;

4. components/TodoList.js

// components/TodoList.js
import React from 'react';function TodoList({ todos, toggleTodo, deleteTodo }) {return (<ul>{todos.map((todo) => (<li key={todo.id}><spanonClick={() => toggleTodo(todo.id)}style={{textDecoration: todo.completed ? 'line-through' : 'none',}}>{todo.text}</span><button onClick={() => deleteTodo(todo.id)}>Delete</button></li>))}</ul>);
}export default TodoList;

5. components/TodoItem.js

// components/TodoItem.js
import React, { useState } from 'react';function TodoItem({ addTodo }) {const [value, setValue] = useState('');const handleSubmit = (e) => {e.preventDefault();if (value.trim() !== '') {addTodo(value);setValue('');}};return (<form onSubmit={handleSubmit}><inputtype="text"value={value}onChange={(e) => setValue(e.target.value)}placeholder="Add a new todo"/><button type="submit">Add</button></form>);
}export default TodoItem;

6. index.css

/* index.css */
body {font-family: Arial, sans-serif;margin: 20px;
}h1 {text-align: center;
}ul {list-style-type: none;padding: 0;
}li {display: flex;align-items: center;margin-bottom: 10px;
}span {flex: 1;cursor: pointer;
}button {margin-left: 10px;padding: 5px 10px;background-color: #ff4d4d;border: none;color: white;cursor: pointer;border-radius: 3px;
}button:hover {background-color: #ff1a1a;
}

7. 运行应用

在项目根目录下运行:

npm start

打开浏览器访问 http://localhost:3000/,即可看到 Todo List 应用。


五、总结

本文涵盖了创建 React 应用程序所需的主要语法知识点,并通过一个简单的 Todo List 应用展示了如何应用这些知识。随着对 React 的深入学习,你可以探索更多高级主题,如 Redux、React Router、服务器端渲染(SSR)等。

http://www.dtcms.com/a/360861.html

相关文章:

  • 反物质量子比特初探
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【iOS】关键字复习
  • 【iOS】折叠cell
  • 量子電腦組裝
  • FunASR开源部署中文实时语音听写服务(CPU)
  • 配送算法19 Two Fast Heuristics for Online Order Dispatching
  • windows10专业版系统安装本地化mysql服务端
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具