美文网首页
[react]4.1、练习

[react]4.1、练习

作者: 史记_d5da | 来源:发表于2021-10-26 21:34 被阅读0次

1、在界面上以表格的形式,显示一些书籍的数据;
2、在底部显示书籍的总价格;
3、点击+或者-可以增加或减少书籍数量(如果为1,那么不能继续-);
4、点击移除按钮,可以将书籍移除


练习
// utils.js
function formatPrice(price) {
    if (typeof price !== "number") {
        price = Number(price) || 0 // 逻辑或运算
    }
    return "¥" + price.toFixed(2);
}
// index.html
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app"></div>
    <style>
        table {
            border: 1px solid #eee;
            border-collapse: collapse;
        }

        td,
        th {
            border: 1px solid #eee;
            padding: 10px 16px;
            text-align: center;
        }

        th {
            background-color: #aaa;
        }

        .counter {
            margin: 0 5px;
        }
    </style>
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <script src="./format_util.js"></script>
    <script type="text/babel">
        class App extends React.Component {
            constructor() {
                super()
                this.state = {
                    books: [
                        {
                            id: 1,
                            name: '《算法导论》',
                            date: '2006-9',
                            price: 85.00,
                            count: 1
                        },
                        {
                            id: 2,
                            name: '《UNIX编程艺术》',
                            date: '2006-2',
                            price: 59.00,
                            count: 1
                        },
                        {
                            id: 3,
                            name: '《编程珠玑》',
                            date: '2008-10',
                            price: 39.00,
                            count: 1
                        },
                        {
                            id: 4,
                            name: '《代码大全》',
                            date: '2006-3',
                            price: 128.00,
                            count: 1
                        },
                    ]
                }
            }
            render() {
                return (
                    <div>
                        <table>
                            <thead>
                                <tr>
                                    <th></th>
                                    <th>书籍名称</th>
                                    <th>出版日期</th>
                                    <th>价格</th>
                                    <th>购买数量</th>
                                    <th>操作</th>
                                </tr>
                            </thead>
                            <tbody>
                                {
                                    this.state.books.map((item, index) => {
                                        return (
                                            <tr>
                                                <td>{index + 1}</td>
                                                <td>{item.name}</td>
                                                <td>{item.date}</td>
                                                <td>{formatPrice(item.price)}</td>
                                                <td>
                                                    <button disabled={item.count < 1} onClick={e => {
                                                        this.onChangeBooks(index, -1);
                                                    }}>-</button>
                                                    <span className="counter">{item.count}</span>
                                                    <button onClick={() => {
                                                        this.onChangeBooks(index, 1);
                                                    }}>+</button>
                                                </td>
                                                <td>
                                                    <button onClick={() => {
                                                        this.removeBook(index);
                                                    }}>移除</button>
                                                </td>
                                            </tr>
                                        )
                                    })
                                }
                            </tbody>
                        </table>
                        <h2>总价格: + {this.getTotalPrice()}</h2>
                    </div>
                )
            }

            onChangeBooks(index, count) {
                const newBooks = [... this.state.books];
                newBooks[index].count += count;
                this.setState({
                    books: newBooks
                })
            }

            removeBook(index) {
                this.setState({
                    books: this.state.books.filter((item, indey) => index !== indey)
                })
            }

            getTotalPrice() {
                // reduce
                // 返回函数的参数
                // 函数回调的结果(第一次没有回调结果用函数的初始化值)
                const totalPrice = this.state.books.reduce((preValue, item, arr) => {
                    return preValue + item.price * item.count;
                }, 0);
                return formatPrice(totalPrice);
            }
        }
        ReactDOM.render(<App />, document.getElementById("app"));
    </script>
</body>

</html>

相关文章

  • [react]4.1、练习

    1、在界面上以表格的形式,显示一些书籍的数据;2、在底部显示书籍的总价格;3、点击+或者-可以增加或减少书籍数量(...

  • 4.1练习

    1.有人说:“自己是最了解自己的”,也有人说:“自己的内心很难认知”,你怎么看? 2.单位开展“两学一做”党章党规...

  • scala04.数据结构(重点)

    第4章数据结构(重点练习章节) 4.1主要的集合特质 4.1主要的集合特质Scala同时支持可变集合和不可变集合,...

  • react-native入门之环境搭建(一)

    简介 react-native最低系统要求iOS8.0以上或Android4.1以上,RN需要JS运行环境,在iO...

  • dva搭建简易react项目实践总结

    目录 1. 前言 2. 工具 & 环境 & 学习资料 3. 安装脚手架 & 创建react项目 4. 设计 4.1...

  • react练习

    1. 带有自己名字的HelloMessage组件,名字通过props传递。 2. 一个背景色为绿色的盒子,3秒后颜...

  • react练习

    功能 滚动

  • [react]7.1练习

    1、实现顶部tab点击效果 App.js style.css TabControl.js 2、React-slot...

  • 常量

    4.1 概述 常量:是指在Java程序中固定不变的数据。 4.2 分类 4.3 练习 需求:输出各种类型的常量

  • Swift 判断是否在 模拟器 运行

    Swift 4.1 之前 Swift 4.1 之后

网友评论

      本文标题:[react]4.1、练习

      本文链接:https://www.haomeiwen.com/subject/hnfealtx.html