首页 > 其他分享 >【前端】react入门级写法介绍和部分Demo

【前端】react入门级写法介绍和部分Demo

时间:2025-01-03 10:23:01浏览次数:6  
标签:function return Demo react 入门级 useState 组件 data

React 是一个由 Facebook 维护的用于构建用户界面的 JavaScript 库,特别是单页应用中数据渲染部分。它允许开发者创建复杂的UI界面,并且高效地更新和渲染当数据变化时的视图。React 的核心理念是组件化开发,即通过组合小的、可重用的代码片段(组件)来构建整个应用程序。

以下是十个常见的 React 写法介绍以及相应的 Demo 举例,涵盖从基础到高级的概念。

1. 函数组件与类组件

函数组件是 React 中推荐的组件形式,使用起来更简洁,并且支持 Hooks。

Demo:

// 函数组件
function Greeting() {
  return <h1>Hello, world!</h1>;
}

// 类组件(旧版)
class GreetingClass extends React.Component {
  render() {
    return <h1>Hello, world!</h1>;
  }
}

2. 使用 useState 管理状态

useState 是一个 Hook,它允许函数组件拥有状态。

Demo:

import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <>
      <p>你点击了 {count} 次</p>
      <button onClick={() => setCount(count + 1)}>点击我</button>
    </>
  );
}

3. 使用 useEffect 执行副作用操作

useEffect Hook 用于处理副作用,比如数据获取、订阅或手动修改 DOM。

Demo:

import { useEffect, useState } from 'react';

function Example() {
  const [data, setData] = useState(null);

  useEffect(() => {
    // 假设这里执行了一个 API 请求
    fetch('/api/data')
      .then(response => response.json())
      .then(setData);
  }, []); // 空数组意味着只在首次渲染时调用

  return <div>{data ? data : '加载中...'}</div>;
}

4. Props 的传递

Props 是父组件向子组件传递数据的方式。

Demo:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// 使用
<Welcome name="Sara" />

5. 使用 useContext 共享状态

useContext 可以让你在多个组件间共享状态,而不需要通过 props 逐层传递。

Demo:

const ThemeContext = React.createContext('light');

function ThemedButton() {
  return (
    <ThemeContext.Consumer>
      {theme => <button style={{ background: theme }}>I am styled by context!</button>}
    </ThemeContext.Consumer>
  );
}

// 使用
<ThemeContext.Provider value="dark">
  <ThemedButton />
</ThemeContext.Provider>

6. 条件渲染

根据条件选择性地渲染组件。

Demo:

function Greeting({ isLoggedIn }) {
  if (isLoggedIn) {
    return <UserGreeting />;
  }
  return <GuestGreeting />;
}

7. 列表渲染

遍历数组并渲染列表项。

Demo:

function NumberList({ numbers }) {
  const listItems = numbers.map((number) =>
    <li key={number.toString()}>{number}</li>
  );
  return <ul>{listItems}</ul>;
}

8. 表单处理

管理受控组件,即表单元素的值由 React 状态控制。

Demo:

function NameForm() {
  const [value, setValue] = useState('');

  function handleChange(event) {
    setValue(event.target.value);
  }

  function handleSubmit(event) {
    alert('提交的名字: ' + value);
    event.preventDefault();
  }

  return (
    <form onSubmit={handleSubmit}>
      <label>
        名字:
        <input type="text" value={value} onChange={handleChange} />
      </label>
      <input type="submit" value="提交" />
    </form>
  );
}

9. 高阶组件(HOC)

高阶组件是一个返回另一个组件的函数。

Demo:

function withSubscription(WrappedComponent, selectData) {
  return class extends React.Component {
    constructor(props) {
      super(props);
      this.handleChange = this.handleChange.bind(this);
      this.state = {
        data: selectData(DataSource, props)
      };
    }

    componentDidMount() {
      // ... subscribe to data source
    }

    componentWillUnmount() {
      // ... unsubscribe from data source
    }

    handleChange() {
      this.setState({
        data: selectData(DataSource, this.props)
      });
    }

    render() {
      // 注意我们如何将所有属性传递给包装组件
      return <WrappedComponent data={this.state.data} {...this.props} />;
    }
  }
}

10. 自定义 Hook

自定义 Hook 是一种复用逻辑的好方法。

Demo:

import { useState, useEffect } from 'react';

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(url)
      .then(response => response.json())
      .then(data => {
        setData(data);
        setLoading(false);
      });
  }, [url]);

  return { data, loading };
}

function DataDisplay() {
  const { data, loading } = useFetch('/api/data');

  if (loading) return <p>Loading...</p>;

  return <pre>{JSON.stringify(data, null, 2)}</pre>;
}

这些例子涵盖了 React 应用开发中的常见模式和最佳实践。随着经验增长,会找到更多适合特定需求的写法和技巧。


标签:function,return,Demo,react,入门级,useState,组件,data
From: https://www.cnblogs.com/xiaozhu007/p/18649471

相关文章

  • 阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)
    阻抗(Impedance)、容抗(CapacitiveReactance)、感抗(InductiveReactance)都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别:1. 阻抗(Impedance,Z)阻抗是交流电路中电压和电流之间的总关系,包括电阻和电抗两部分。它是一个复数量,由......
  • 从零开始构建React Native数字键盘功能
    从零开始构建ReactNative数字键盘功能发布于 2024-03-0113:58:333230举报文章被收录于专栏:终身学习者现代移动应用程序在入门过程中经常涉及一个步骤,你需要输入发送到你的电子邮件或手机号码的验证码PIN。有时,你需要使用类似于分割OTP输入字段的东......
  • React 国际化
    1.国际化的基础概念1.1什么是国际化?国际化(i18n):使应用程序支持多语言的能力。本地化(l10n):根据用户的语言、地区设置调整内容,如日期、时间、货币格式等。1.2国际化在React中的常见需求支持多种语言的文本翻译。根据地区调整日期、时间、货币格式。动态切换语言和文......
  • 如果不使用脚手架,如果用webpack构建一个自己的react应用
    以下是使用Webpack构建一个自己的React应用的基本步骤:1.项目初始化首先创建一个项目文件夹,并在其中初始化package.json文件(用于管理项目的依赖和脚本等),打开命令行,进入项目文件夹,执行以下命令:mkdirmy-react-appcdmy-react-appnpminit-y2.安装必要的依赖需要安装React......
  • React 19 深度剖析:从架构升级到性能优化
    React19深度剖析:从架构升级到性能优化目录React19架构升级新特性深度解析性能优化最佳实践高级功能应用工程化实践迁移策略实战案例常见问题解决1.React19架构升级1.1新一代并发渲染引擎React19采用全新的并发渲染架构,显著提升了应用性能://新的并发模式配......
  • 从0开始的Opencv之旅(到尝试构建一个图像编辑器):0,opencv demo
    关于opencv的下载,参考笔者的博客OpenCV4.9.0+扩展+WITH_QT(Qt6)模块编译教程(Windows)_opencv4.9qt-CSDN博客大伙都知道,opencv是一个图像处理的一个重要的库。在OpenCV4中,我们有多个模块。每个模块负责不同的图像处理领域或方法。先不着急仔细一头扎进我们的图像处理里去,......
  • 深入理解 React 中的状态管理:Context API 与 Redux 的对比
    深入理解React中的状态管理:ContextAPI与Redux的对比目录前言React状态管理概述2.1.什么是状态管理?2.2.为什么需要状态管理?React的状态管理方式3.1.组件内部状态3.2.ReactContextAPI3.3.Redux状态管理ReactContextAPI深入解析4.1.Context的基......
  • JavaScript开发中常见问题代码和相关优化Demo参考5.0
    41. 过度使用全局状态管理问题代码:在小型项目中引入了复杂的全局状态管理库(如Redux),增加了不必要的复杂性。解决方案:对于小型应用或简单状态管理需求,考虑使用React的useState和useContext,或者Vuex等框架自带的状态管理功能。//使用ReactContextAPIconstThemeContext=......
  • WebApiDemo
    以下是一个使用ASP.NETWebAPI(基于.NETFramework)的简单示例。1.创建ASP.NETWebAPI项目首先,确保你已经安装了VisualStudio,并且选择了包含ASP.NET和Web开发工作负载的安装选项。打开VisualStudio。选择“创建新项目”。在搜索栏中输入“ASP.NETWeb应用程序(.NETFra......
  • React CountUp
    ReactCountUp     AconfigurableReactcomponentwrapperaround CountUp.js.Click here toviewonCodeSandbox.Previousdocsv3.xv4.xv5.xTableofContentsInstallationUsageSimpleexampleRenderpropexampleMoreexamplesManually......