博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React实现购物车功能
阅读量:6688 次
发布时间:2019-06-25

本文共 3232 字,大约阅读时间需要 10 分钟。

这个简单的demo,功能是这样的:

最左侧是列表,点击列表项可查看详情,中间是详情,详情中有按钮,点击可加入购物车,最右侧是购物车,购物车自动更新总数和总价.
使用create-react-app创建.
代码如下:

index.js:

import React from 'react';import ReactDOM from 'react-dom';import Books from './Books';import '../node_modules/bootstrap/dist/css/bootstrap.min.css';import './styles/index.css';ReactDOM.render(  
, document.getElementById('root'));

Books.js:

import React, { Component } from 'react';import BookList from './BookList';import BookDetail from './BookDetail';import Car from './Car';class Books extends Component {  constructor() {    super()    this.handleListClick = this.handleListClick.bind(this);    this.handleAddToCar = this.handleAddToCar.bind(this);    this.state = {      currentBook: null,      car: [],      totalNum: 0,      total: 0    };  }  handleListClick(book) {    this.setState({      currentBook: book    });  }  handleAddToCar(currentBook) {    let totalNum = this.state.totalNum;    let car = this.state.car;    let total = this.state.total;    let exist = false;    if (car.length) {      car.forEach(book => {        if (book.id === currentBook.id) {          book.number += 1;          totalNum += 1;          exist = true;          this.setState({            totalNum          });        }      });    }    if (!exist) {      car = car.concat(Object.assign({}, currentBook, {number:1}));      totalNum += 1;      this.setState({          car,          totalNum      });     }    total = car.map(book => (book.price * book.number)).reduce((prev, cur) => prev + cur);    this.setState({      total    });  }  render() {    return (      
); }}Books.defaultProps = { books: [ { id: 1, category: 'CSS', title: 'CSS权威指南', author: 'Eric A. Meyer', price: 42 }, { id: 2, category: 'JS', title: 'JavaScript高级程序设计', author: 'Nicholas C.Zakas', price: 69 }, { id: 3, category: 'CSS', title: '精通CSS:高级Web标准解决方案', author: '巴德,科利森,莫尔', price: 25 } ]};export default Books;

BookList.js:

import React from 'react';const BookList = ({books, listClick}) => {  return (    

图书列表

    {books.map((book) => { return (
  • listClick(book)}> {book.title}
  • ) })}
);};export default BookList;

BookDetail.js

import React from 'react';const Bookdetail = ({currentBook, addToCar}) => {  if (!currentBook) return 

选择图书

return (

图书详情

{currentBook.title}

作者:{currentBook.author}

价格:{currentBook.price}

编号:{currentBook.id}

);};export default Bookdetail;

Car.js:

import React from 'react';const Car = ({car, totalNum, total}) => {  let result = car.length ? 

共{totalNum}本 总价为{total}

:

购物车为空

; return (

购物车

    { car.map((book, index) => { return
  • {book.title} 价格为: {book.price} 已选择{book.number}本
  • }) }
{result}
);};export default Car;

转载地址:http://muuoo.baihongyu.com/

你可能感兴趣的文章
浅谈数据库之存储过程
查看>>
化繁为简|华天软件参数化,将轴承设计变为数与数的组合
查看>>
深入理解Java内存模型(一)——基础
查看>>
美图秀秀下载|美图秀秀电脑版下
查看>>
生产者消费者模式
查看>>
tomcat的Context配置,虚拟访问数据
查看>>
选择手持机品牌对后期工作效率提升
查看>>
ORACLE---添加控制文件
查看>>
学习感悟——从如何读书引发的思考
查看>>
我的友情链接
查看>>
CSAPP缓冲区溢出实验记录(二)
查看>>
TD-LTE的那些事
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Linux内核中用d_path得到绝对路径名
查看>>
Qt中QString,char,int,QByteArray之间到转换
查看>>
Exchange Server 2007邮箱存储服务器的集群和高可用性技术(上)
查看>>
磁盘管理与磁盘阵列RAID
查看>>
Linux学习笔记4-软件安装
查看>>
8.python之面相对象part.8(类装饰器)
查看>>