React 基础阶段学习计划

news2024/10/20 1:21:45

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>
            <input
              type="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.coloradmin.cn/o/2218892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fastStone Capture截图神器,你想要的功能它都有!

前言 大家好&#xff0c;我是小徐啊。从今天开始&#xff0c;小徐将介绍很多Java开发领域相关的软件工具资源&#xff0c;欢迎大家关注。今天&#xff0c;介绍一款非常小巧&#xff0c;但功能十分强大的图片软件&#xff0c;fastStone Capture。这款工具&#xff0c;主要是图片…

101、QT摄像头录制视频问题

视频和音频录制类QMediaRecorder QMediaRecorder 通过摄像头和音频输入设备进行录像。 注意: 使用Qt多媒体模块的摄像头相关类无法在Windows平台上进行视频录制&#xff0c;只能进行静态图片抓取但是在Linux平台上可以实现静态图片抓取和视频录制。 Qt多媒体模块的功能实现是依…

Git之代已修改文件的目录高亮设置

不管Android Studio或者Idea&#xff0c;进入Setting 选择如图所示&#xff0c;并进行勾选 就可以高亮了。

sentinel原理源码分析系列(四)-ContextEntry

启动和初始化完成后&#xff0c;调用者调用受保护资源&#xff0c;触发sentinel的机制&#xff0c;首先构建或获取Context和获取Entry&#xff0c;然后进入插槽链&#xff0c;决定调用是否通过&#xff0c;怎样通过 上图展示构建Context和获取Entry的类互动图 获取或构建Conte…

深度学习实战94-基于图卷积神经网络GCN模型的搭建以及在金融领域的场景

大家好,我是微学AI,今天给大家介绍一下深度学习实战94-基于图卷积神经网络GCN模型的搭建以及在金融领域的场景。文章首先介绍了GCN模型的原理及模型结构,随后提供了数据样例,并详细展示了实战代码。通过本文,读者可以深入了解GCN模型在金融场景下的应用,同时掌握代码的具…

keil5软件调试纪要

1&#xff0c;连接ST-LINK后查看连接信息。 2&#xff0c;除了printf调式外&#xff0c;keil5进行如下调式。 &#xff08;0&#xff09;进入调试界面 退出调式界面 &#xff08;1&#xff09; 打断点 &#xff08;2&#xff09;复位 &#xff08;3&#xff09;运行 &#xf…

判断一个数是不是素数(质数)(c语言)

素数的定义&#xff1a; 大于1的自然数&#xff0c;除了1和他本身不再有其它的因数 数学原理&#xff1a; 假设一个num不是素数&#xff0c;必然存在一个因子&#xff0c;该因为一定<√num&#xff0c;因此只要检测到√num中是否存在因子即可。 代码如下&#xff1a; #…

基于springboot+vue 大学毕业设计管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

python 作业1

任务1: python为主的工作是很少的 学习的python的优势在于制作工具&#xff0c;制作合适的工具可以提高我们在工作中的工作效率的工具 提高我们的竞争优势。 任务2: 不换行 换行 任务3: 安装pycharm 进入相应网站Download PyCharm: The Python IDE for data science and we…

day02 -- docker

1.docker的介绍 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使…

androidStudio编译导致的同名.so文件冲突问题解决

files found with path lib/arm64-v8a/libserial_port.so from inputs: ...\build\intermediates\library_jni\debug\jni\arm64-v8a\libserial_port.so C:\Users\...\.gradle\caches\transforms-3\...\jni\arm64-v8a\XXX.so 解决方式如下&#xff1a; 1.将gradle缓存文件删…

mysql 10 单表访问方法

01.优化的过程 对于我们这些 MySQL 的使用者来说&#xff0c; MySQL 其实就是一个软件&#xff0c;平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化&#xff0c;我们如果连查询是怎么执行的都不清楚还优化个毛线&#xff0c;所以是时候掌握真正的技术了。我…

推荐?还是踩雷?3款中英互译软件大盘点,你真的选对了吗?

作为一个爱到处跑的人&#xff0c;我特别明白旅行的时候能说会道有多重要。不管是跟当地人聊天&#xff0c;还是看路标、菜单&#xff0c;有个好用的翻译软件是肯定少不了的。今天&#xff0c;我打算给你们介绍3款中英文互译的翻译工具&#xff0c;帮你挑出最适合自己的那一个。…

图论day62|拓扑排序理论基础、117.软件构建(卡码网)、最短路径之dijkstra理论基、47.参加科学大会(卡码网 第六期模拟笔试)

图论day62|拓扑排序理论基础、117.软件构建&#xff08;卡码网&#xff09;、最短路径之dijkstra理论基、47.参加科学大会&#xff08;卡码网 第六期模拟笔试&#xff09; 拓扑排序理论基础117.软件构建&#xff08;卡码网&#xff09;最短路径之dijkstra理论基础47.参加科学大…

大数据-173 Elasticsearch 索引操作 增删改查 详细 JSON 操作

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

面试题:Redis(七)

1. 面试题 2. 缓存预热 当Redis暂时没有数据&#xff0c;但MySQL中有数据时&#xff0c;由程序员、中间件、写段程序提前访问该数据&#xff0c;使得数据进行回写进Redis&#xff0c;从而达到缓存预热的效果&#xff0c;这样可以使得一开始访问页面程序的用户也没有卡顿&#x…

力扣 简单 876.快慢指针

文章目录 题目介绍题解 题目介绍 题解 class Solution {public ListNode middleNode(ListNode head) {ListNode slow head, fast head;while(fast ! null && fast.next ! null){slow slow.next;fast fast.next.next;}return slow;} }

JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|顶刊精析·24-10-18

小罗碎碎念 这篇文章是关于一项名为DeepHRD的深度学习平台的研究&#xff0c;该平台能够从常规的苏木精-伊红&#xff08;H&E&#xff09;染色组织切片中预测同源重组缺陷&#xff08;HRD&#xff09;和铂类药物反应。 作者角色姓名单位第一作者Erik N. Bergstrom加州大学圣…

c4d好用的渲染软件有哪些?c4d各个渲染器的优缺点

在3D设计和动画制作领域&#xff0c;Cinema 4D&#xff08;C4D&#xff09;是一款备受欢迎的软件。它强大的建模、动画和渲染功能&#xff0c;使其成为许多设计师和艺术家的首选工具。然而&#xff0c;C4D的内置渲染器可能无法满足所有项目的需求&#xff0c;因此许多用户会选择…

31. 问题 - GPIO调试

1. 概述 gpio调试过程中,个别gpio出现,波形干扰 2. gpio配置表 GPIO 功能 备注