day02作业
购物车全选和总价实现

需求: 简单的购物车的全选和总计的功能实现,这里用到了状态提升,涉及到父传子、子传父,兄弟之间的数据的传递
页面基本结构
布局相应的结构,每一个li里面要设置的内容比较多,所以我们把li单独抽取成一个组件
对应的css代码
加减按钮的点击事件处理
结构写完后,现在页面上可以看到对应的效果,但是点击按钮的逻辑没有实现,此时需要给 + - 按钮添加点击事件
利用子传父的方式,我们需要在父组件中定义两个回调函数,分别对应 +(add) 和 -(reduce)
然后把这两个回调函数设置到子组件的属性上,通过props传递到子组件
给子组件添加点击事件
(childAdd、childReduce),当点击了后,调用 通过props传递过来的函数调用这个函数的时候需要传递一个数据,就是商品的id,这样在父组件的方法中才能知道用户点击的是哪一个商品
拿到传递过来的id后,需要遍历 carts的数组,判断是否与传递过来的id相同,如果相同,修改相应的数量,然后通过
this.setState()来更新UI
子组件的checkbox状态更改
需要把checkbox做成受控组件,受控的值是有父组件传递过来的商品对象里面的
isCheck的值,所以我们需要给checkbox绑定onChange事件在
onChange事件里面,需要调用父组件的函数,来修改对应的isCheck的值,这里就需要父组件定义一个回调函数(onCheckStatus),通过props传递给子组件调用父组件对应回调函数的时候需要携带两个参数,一个是当前选中的状态,一个是对应商品的id
在父组件的回调函数里面获取到两个值之后,需要遍历当前carts,判断id是否相同,如果相同,修改对应的状态
还需要完成一件事,判断一下当前所有的商品的
isCheck的值是否为true,如果是true,需要更改一下全选的状态调用一下
this.setState()来更新UI
全选按钮的状态更改
给全选按钮设置一个状态(
allCheckStatus),绑定onChange事件在事件处理逻辑中,把当前状态赋值给state里面的状态
同步更新子组件里面的状态,遍历carts,把所有商品对象的
isCheck状态设置与allCheckStatus的一致然后利用
this.setState()来更新UI
总价更新
在父组件的 state里面定义 状态(total)
在每一次更新UI的时候(+按钮、-按钮、单选、全选),都需要遍历一下carts,判断商品对象的
isCheck的属性是否是true,如果是true代表选中,累加到total上即可
示例代码
温度计

需求:当用户输入 摄氏温度,我们需要把值转成华氏度,如果摄氏温度没有达到100,下面显示水还没有沸腾,否则显示沸腾了,这里用到了状态提升,涉及到父传子、子传父,兄弟之间的数据的传递
页面的基本结构
摄氏度和华氏度转换工具
温度的相互转换
摄氏度和华氏度两个子组件是兄弟关系,数据要通过父组件来进行共享,所以需要在父组件上定义一个温度的状态(
temperature),以及温度类型的状态(scale)父组件还需要提供回调函数,当子组件触发了,两个触发点,需要定义两个回调函数,摄氏度(
handleCelsiusChange)、华氏度(handleFahrenheitChange)把这两个函数当前子组件的属性,属性名相同,属性值不同,这样子组件只需要调用相应的属性名即可,通过props传递到子组件中
在子组件的输入框绑定
onChange事件,在事件处理逻辑里面调用 传递过来的回调函数,把当前输入的值传递给父组件父组件拿到相应的值后,通过
this.setState()方法更新里面的数据一旦调用了
this.setState()方法,就会导致render方法重新执行,在这里我们需要对温度的值进行换算通过state状态里面的
scale来判断是华氏度还是摄氏度,相应调用一下转换工具函数,把结果设置到对应的子组件的函数属性中
示例代码
最后更新于
这有帮助吗?