2023 React 18 系统入门 进阶实战《欢乐购》「高清F享」

664 阅读3分钟

2023 React 18 系统入门 进阶实战《欢乐购》

核心代码,注释必读

// download:3w ukoou com

本教程将引导您进入 React 18 的世界,并通过一个实战项目《欢乐购》来帮助您掌握 React 的基本概念和进阶技巧。《欢乐购》是一个简单的电子商务网站,我们将从搭建项目开始,逐步实现产品展示、购物车、用户登录等功能。

准备工作

在开始之前,确保您已经安装了最新版本的 Node.js 和 npm。您还需要熟悉基本的 HTML、CSS 和 JavaScript。

步骤 1:创建 React 应用

首先,打开终端并执行以下命令来创建一个新的 React 应用:

bash复制代码
npx create-react-app happy-shopping
cd happy-shopping

步骤 2:项目结构概览

进入项目目录后,我们来看一下项目的基本结构:

复制代码
happy-shopping
├── public
│   ├── index.html
│   └── ...
└── src
    ├── components
    │   ├── Product.js
    │   ├── Cart.js
    │   └── ...
    ├── pages
    │   ├── Home.js
    │   ├── CartPage.js
    │   └── ...
    ├── App.js
    └── index.js

步骤 3:实现产品展示

我们首先实现产品展示功能。在 src/components/Product.js 中,创建一个简单的产品组件:

jsx复制代码
import React from 'react';

const Product = ({ name, price, image }) => {
  return (
    <div className="product">
      <img src={image} alt={name} />
      <h3>{name}</h3>
      <p>Price: ${price}</p>
    </div>
  );
};

export default Product;

接下来,在 src/pages/Home.js 中,使用 Product 组件来展示多个产品:

jsx复制代码
import React from 'react';
import Product from '../components/Product';

const Home = () => {
  const products = [
    { name: 'Product 1', price: 19.99, image: 'product1.jpg' },
    { name: 'Product 2', price: 29.99, image: 'product2.jpg' },
    // Add more products here
  ];

  return (
    <div className="home">
      {products.map((product, index) => (
        <Product key={index} name={product.name} price={product.price} image={product.image} />
      ))}
    </div>
  );
};

export default Home;

步骤 4:实现购物车功能

现在我们来实现购物车功能。在 src/components/Cart.js 中,创建一个简单的购物车组件:

jsx复制代码
import React from 'react';

const Cart = ({ items }) => {
  const getTotalPrice = () => {
    return items.reduce((total, item) => total + item.price, 0);
  };

  return (
    <div className="cart">
      <h2>Shopping Cart</h2>
      <ul>
        {items.map((item, index) => (
          <li key={index}>{item.name}</li>
        ))}
      </ul>
      <p>Total Price: ${getTotalPrice()}</p>
    </div>
  );
};

export default Cart;

然后,在 src/pages/CartPage.js 中,使用 Cart 组件来展示购物车内容:

jsx复制代码
import React from 'react';
import Cart from '../components/Cart';

const CartPage = () => {
  const cartItems = [
    { name: 'Product 1', price: 19.99 },
    { name: 'Product 2', price: 29.99 },
    // Add more cart items here
  ];

  return (
    <div className="cart-page">
      <Cart items={cartItems} />
    </div>
  );
};

export default CartPage;

步骤 5:实现用户登录功能

最后,我们实现用户登录功能。在 src/components/Login.js 中,创建一个简单的登录组件:

jsx复制代码
import React, { useState } from 'react';

const Login = ({ onLogin }) => {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');

  const handleLogin = () => {
    // Implement login logic here
    onLogin(username);
  };

  return (
    <div className="login">
      <input type="text" placeholder="Username" value={username} onChange={(e) => setUsername(e.target.value)} />
      <input type="password" placeholder="Password" value={password} onChange={(e) => setPassword(e.target.value)} />
      <button onClick={handleLogin}>Login</button>
    </div>
  );
};

export default Login;

然后,在 src/pages/LoginPage.js 中,使用 Login 组件来实现用户登录:

jsx复制代码
import React from 'react';
import Login from '../components/Login';

const LoginPage = () => {
  const handleLogin = (username) => {
    alert(`Welcome, ${username}!`);
  };

  return (
    <div className="login-page">
      <Login onLogin={handleLogin} />
    </div>
  );
};

export default LoginPage;

在 React 中,可以通过父子组件之间的数据传递来解决数据共享的问题。具体的方法如下:

  1. 父组件向子组件传递数据:父组件可以通过 prop(属性)将数据传递给子组件。子组件通过 this.props 来访问这些属性。
javascriptCopy Code
class ParentComponent extends React.Component {
  render() {
    const data = 'Hello from parent!';

    return (
      <ChildComponent message={data} />
    );
  }
}

class ChildComponent extends React.Component {
  render() {
    return (
      <div>{this.props.message}</div>
    );
  }
}

在上面的例子中,ParentComponent 将一个名为 message 的 prop 传递给了 ChildComponent,然后在子组件中使用 this.props.message 来访问该属性。

  1. 子组件向父组件传递数据:如果需要将子组件的数据传递回父组件,可以通过在父组件中定义一个回调函数,并将其作为 prop 传递给子组件。子组件可以在适当的时机调用该回调函数,并将数据作为参数传递给它。
javascriptCopy Code
class ParentComponent extends React.Component {
  handleData(data) {
    console.log('Data received from child:', data);
  }

  render() {
    return (
      <ChildComponent sendData={this.handleData} />
    );
  }
}

class ChildComponent extends React.Component {
  sendDataToParent() {
    const data = 'Hello from child!';
    this.props.sendData(data);
  }

  render() {
    return (
      <button onClick={this.sendDataToParent}>Send Data</button>
    );
  }
}

在上面的例子中,ChildComponent 通过 this.props.sendData 调用了父组件中的回调函数,并将数据作为参数传递给它。

通过父子组件之间的数据传递,可以实现数据共享并实现组件之间的通信。请注意,在实际应用中,数据共享可能更复杂,可以考虑使用状态管理库(例如 Redux 或 Mobx)来更好地管理应用程序的状态。