zoukankan      html  css  js  c++  java
  • 由react的todolist想到的

    react哲学:state元数据的不可变性

    1. 只允许使用setstate修改数据,
    2. 尽量生成新数据而(如果是引用数据,可以进行浅拷贝,然后再赋值)

    太懒,索性截个图:

    由上图看到,一个书籍列表,分别有几个功能:单个书籍数量的增减,点击操作时会移除一整项,下方会有总价即时更改。

    为了不违反react哲学,可以使用高阶函数

    规约1:以render函数为界:组件函数放在render前面,功能函数放在render函数后面,

    规约2:如果需要使用一个不用但必须要传的参数时,统一使用_表示

    规约3:多重遍历都需索引时可以使用index、y、z、a、b 类似甲乙丙丁戊戌

    //数量增减
    //封装数量函数
    /*
    params  => index: item的index
    params  => chages: 变化的值, +1或者-1,由函数触发时传入
    */
      changeNum(index, chages) {
        let arrs = [...this.state.arrList]
        arrs.map((item, indez) => {
          if (index === indez) {
            item.num += chages
            return item
          }
          return item
        })
        this.setState({
          arrList: arrs
        })
      }
    
    //移除item
    /*
    params  => index : item的index
    */ 
        // 点击时获取index,然后遍历这个list,filter返回为真的item,将index与indez比较,如果相等才会返回item
      removeItem(index) {
        this.setState({
          arrList: this.state.arrList.filter((_, indez) => index !== indez)
        })
      }
    
    //求总和 每一项的单价乘以数量(若正规则需结合total函数)
      total() {
        // 回调函数内第一个参数表示上一次累加的值,reduce第二个参数表示初始值累加值,建议0
        return this.state.arrList.reduce((pre, item) => pre + item.price * item.num, 0)
      }
    //对显示数据进行格式化
    /*
    params => price:价格
    */
      format(price) {
        return typeof price === 'number' ? `¥${price}` : price
      }
    

    以上。

    作者:致爱丽丝
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面给出原文链接并标名原文作者,否则保留追究法律责任的权利。
  • 相关阅读:
    (CodeForces 548B 暴力) Mike and Fun
    (BestCoder Round #64 (div.2))Array
    (2015 杭电校赛 )玩骰子
    js基础
    frame框架标签
    html
    div嵌套div标签 里层的div透明属性
    div嵌套div标签
    盒子标签div嵌套
    divspan盒子模型
  • 原文地址:https://www.cnblogs.com/hjk1124/p/14974703.html
Copyright © 2011-2022 走看看