React 基础阶段学习计划

ops/2024/10/20 3:03:31/

React 基础阶段学习计划

目标

  • 能够创建和使用React组件。
  • 理解并使用State和Props。
  • 掌握事件处理和表单处理。

学习内容

环境搭建

安装Node.js和npm
  1. 访问 Node.js官网 下载并安装最新版本的Node.js。
  2. 打开终端或命令行工具,输入 node -vnpm -v 检查是否安装成功。
使用Create React App搭建项目
  1. 打开终端,输入以下命令创建一个新的React项目:
    npx create-react-app my-app
    
  2. 进入项目目录:
    cd my-app
    
  3. 启动开发服务器:
    npm start
    

核心概念

JSX语法
  • JSX是一种JavaScript的语法扩展,允许你在JavaScript中编写类似HTML的元素。
  • 示例:
    import React from 'react';function HelloWorld() {return <h1>Hello, World!</h1>;
    }export default HelloWorld;
    
组件
  • 函数组件:简单的组件,通常用于展示数据。
    import React from 'react';function Greeting(props) {return <h1>Hello, {props.name}!</h1>;
    }export default Greeting;
    
  • 类组件:功能更强大的组件,可以管理状态。
    import React, { Component } from 'react';class Counter extends Component {constructor(props) {super(props);this.state = { count: 0 };}increment = () => {this.setState({ count: this.state.count + 1 });}render() {return (<div><p>Count: {this.state.count}</p><button onClick={this.increment}>Increment</button></div>);}
    }export default Counter;
    
State和Props
  • State:组件内部的状态,可以通过this.setState方法更新。
  • Props:父组件传递给子组件的属性。
    import React from 'react';// 子组件
    function ChildComponent(props) {return <p>{props.message}</p>;
    }// 父组件
    class ParentComponent extends React.Component {constructor(props) {super(props);this.state = { message: 'Hello from Parent' };}render() {return <ChildComponent message={this.state.message} />;}
    }export default ParentComponent;
    
事件处理
  • 在React中,事件处理函数通常绑定到组件的方法上。
    import React, { Component } from 'react';class EventHandling extends Component {handleClick = () => {alert('Button clicked!');}render() {return (<button onClick={this.handleClick}>Click me</button>);}
    }export default EventHandling;
    
表单处理
  • React中的表单元素默认是受控组件,即它们的值由React组件的状态控制。
    import React, { Component } from 'react';class FormExample extends Component {constructor(props) {super(props);this.state = { name: '' };this.handleChange = this.handleChange.bind(this);this.handleSubmit = this.handleSubmit.bind(this);}handleChange(event) {this.setState({ name: event.target.value });}handleSubmit(event) {alert('A name was submitted: ' + this.state.name);event.preventDefault();}render() {return (<form onSubmit={this.handleSubmit}><label>Name:<input type="text" value={this.state.name} onChange={this.handleChange} /></label><button type="submit">Submit</button></form>);}
    }export default FormExample;
    

组件生命周期

  • 生命周期方法:组件在不同阶段会触发不同的生命周期方法。
    • componentDidMount:组件挂载后调用。
    • componentDidUpdate:组件更新后调用。
    • componentWillUnmount:组件卸载前调用。
    import React, { Component } from 'react';class LifecycleExample extends Component {componentDidMount() {console.log('Component did mount');}componentDidUpdate(prevProps, prevState) {console.log('Component did update');}componentWillUnmount() {console.log('Component will unmount');}render() {return <div>Lifecycle Example</div>;}
    }export default LifecycleExample;
    

实践项目

个人博客

  1. 创建项目
    npx create-react-app personal-blog
    cd personal-blog
    npm start
    
  2. 创建组件
    • Header.js:头部组件
      import React from 'react';function Header() {return <header><h1>My Personal Blog</h1></header>;
      }export default Header;
      
    • PostList.js:文章列表组件
      import React from 'react';const posts = [{ id: 1, title: 'First Post', content: 'This is the first post.' },{ id: 2, title: 'Second Post', content: 'This is the second post.' },
      ];function PostList() {return (<div>{posts.map(post => (<div key={post.id}><h2>{post.title}</h2><p>{post.content}</p></div>))}</div>);
      }export default PostList;
      
    • App.js:主组件
      import React from 'react';
      import Header from './Header';
      import PostList from './PostList';function App() {return (<div className="App"><Header /><PostList /></div>);
      }export default App;
      

天气应用

  1. 创建项目
    npx create-react-app weather-app
    cd weather-app
    npm start
    
  2. 安装axios
    npm install axios
    
  3. 创建组件
    • Weather.js:天气组件
      import React, { useState, useEffect } from 'react';
      import axios from 'axios';function Weather() {const [weather, setWeather] = useState(null);const [city, setCity] = useState('');useEffect(() => {if (city) {axios.get(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=YOUR_API_KEY`).then(response => {setWeather(response.data);}).catch(error => {console.error('Error fetching weather data:', error);});}}, [city]);return (<div><h1>Weather App</h1><inputtype="text"placeholder="Enter city name"value={city}onChange={(e) => setCity(e.target.value)}/>{weather && (<div><p>Temperature: {weather.main.temp} K</p><p>Weather: {weather.weather[0].description}</p></div>)}</div>);
      }export default Weather;
      
    • App.js:主组件
      import React from 'react';
      import Weather from './Weather';function App() {return (<div className="App"><Weather /></div>);
      }export default App;
      

建议

  • 定期回顾:每周花时间回顾本周所学内容,确保知识点牢固掌握。
  • 参与社区:加入React相关的论坛、Slack群组或Discord服务器,与其他开发者交流心得。
  • 阅读源码:尝试阅读一些简单的React库的源码,提高代码理解和分析能力。

希望这个学习计划能够帮助你系统地学习React基础,并通过实践项目巩固所学知识。祝你学习顺利!


你可以将上述Markdown内容复制到任何支持Markdown的编辑器或平台中,以便于查看和使用。

http://www.ppmy.cn/ops/126874.html

相关文章

Oracle 零宽空格问题处理

在Oracle中&#xff0c;去除字符串两端的零宽空格&#xff08;Zero Width Space&#xff0c;Unicode编码为U200B&#xff09;可以使用TRIM函数结合REGEXP_REPLACE函数来实现。由于标准的TRIM函数只能去除ASCII字符&#xff0c;对于Unicode字符如零宽空格&#xff0c;需要使用正…

机器学习:opencv--人脸检测以及微笑检测

目录 前言 一、人脸检测的原理 1.特征提取 2.分类器 二、代码实现 1.图片预处理 2.加载分类器 3.进行人脸识别 4.标注人脸及显示 三、微笑检测 前言 人脸检测是计算机视觉中的一个重要任务&#xff0c;旨在自动识别图像或视频中的人脸。它可以用于多种应用&#xff0…

案例分享-优秀蓝色系UI界面赏析

蓝色UI设计界面要提升舒适度&#xff0c;关键在于色彩搭配与对比度。选择柔和的蓝色调作为主色&#xff0c;搭配浅灰或白色作为辅助色&#xff0c;能营造清新、宁静的氛围。同时&#xff0c;确保文字与背景之间有足够的对比度&#xff0c;避免视觉疲劳&#xff0c;提升阅读体验…

力扣之接雨水(42)

刷题不在多&#xff0c;而在精。 这道题号称字节的保洁阿姨都能做出的。 方法一&#xff1a;动态规划 下面这幅图简直封神&#xff0c;看了下图我才做出来的。 两个方向遍历&#xff0c;然后取相同覆盖值-原始值&#xff08;heigth数组&#xff09; 这种方法更好理解。但是也有…

基础算法(6)——模拟

1. 替换所有的问号 题目描述&#xff1a; 算法思路&#xff1a; 从前往后遍历整个字符串&#xff0c;找到问号之后&#xff0c;尝试用 a ~ z 的每一个字符替换即可 注意点&#xff1a;需考虑数组开头和结尾是问号的边界情况 代码实现&#xff1a; class Solution {public …

网易翻译工具解析!这几大翻译器值得一试!

翻译工具的出现&#xff0c;使得跨语言沟通变得更加便捷。本文将为您推荐几款优秀的翻译工具&#xff0c;包括福昕在线翻译、福昕翻译客户端、海鲸AI翻译和网易有道翻译&#xff0c;帮助您在学习、工作和生活中轻松应对语言挑战。 福昕在线翻译 直达链接&#xff08;复制到浏…

打造高性能在线电子表格:WebGL 渲染引擎 Kola2d 自研之路

导读&#xff1a;本文主要阐述了 Docs 在线表格为打造极致渲染性能所做的关键优化和过程思考&#xff0c;作为首个在在线电子表格领域自研基于WebGL渲染引擎的「吃螃蟹」者&#xff0c;整个过程面临诸多不确定性与挑战&#xff0c;Kola2d 的整体设计在此期间也经历了几轮推倒重…

为笔杆注入“AI能量”,开启公文写作的新奇之旅

随着人工智能技术的进步与革新&#xff0c;应用场景不断拓展&#xff0c;AI已逐渐在公文写作领域崭露头角&#xff0c;它不仅可以提升写作效率&#xff0c;还能够优化内容质量&#xff0c;为公文写作赋予新的活力与可能性&#xff0c;成为公文写作的有效工具。 与传统的人工撰…