React 中购物车功能实现(全选多选功能实现)

简介: React 中购物车功能实现(全选多选功能实现)

样式代码:

import React, {
    Component } from 'react'
import "./Page.css"
export default class Page extends Component {
   
  state = {
   
    arr: [
      {
    id: 1, goodName: '杨枝甘露', goodPrice: 20 },
      {
    id: 2, goodName: '森林玫果', goodPrice: 30 },
      {
    id: 3, goodName: '烤奶', goodPrice: 15 }
    ],
allChecked: false
  }
  checkNum = 0
  render() {
   
    const {
    arr } = this.state;
    return (
      <div className='Box'>
        <li>
          <input type="checkbox" style={
   {
   marginRight: '10px'}} checked = {
   this.state.allChecked} onChange={
   this.allChose}/>全选
        </li>
        {
   
          arr.map(e =>
            <li key={
   e.id}>
              <input type="checkbox" style={
   {
   marginRight: '10px'}} checked={
   false || e.checked} onChange={
   (event) =>this.itemChange(event,e)}/>
              <span>{
   `商品名称:${
     e.goodName}`}</span>
              <span>{
   `单价:${
     e.goodPrice}`}</span>
              <button>-</button>
              <input type="text" className='num_box'/>
              <button>+</button>
            </li>
          )
        }
        <div className='foot'>
          <p  style={
   {
   fontSize: '18px',textAlign: 'right'}}>结算: ¥169</p>
        </div>
      </div>
    )
  }
}

实现全选多选的功能:
我的实现思路是:
1、在state状态中添加一个属性用来控制全选按钮的状态值 针对单选 我们设置计数器checkNum
2、对单选框设置对应的方法 当点击对应的单选按钮后 将true||false的状态值赋值给对应的对象属性中(即添加checked属性到点击的对应对象中) ,同时若为true则计数器累加,否则递减 当计数器的值等于state中数组的长度的时候,更新state状态中的allChecked属性为true

itemChange = (event,e)=>{
   
    const checked = event.target.checked;
    const {
   arr} = this.state;
    e.checked = checked;
    if(checked){
   
      this.checkNum ++;
    }else{
   
      this.checkNum --;
    }
    if(this.checkNum === arr.length){
   
      this.setState({
   
        allChecked: true
      })
    }else{
   
      this.setState({
   
        allChecked: false
      })
    }
  }

3、此时我们单选按钮与全选按钮就已经有了单向的联系,那么我们怎么去控制全选按钮呢?显而易见,我们对全选设置函数,若点击选中后,将true的状态更新到state中的allChecked中,否则将false更新到对应的状态中

allChose = e => {
   
    const checked = e.target.checked;
    const {
   arr} = this.state;
    this.setState({
   
      allChecked: checked
    })
    arr.map(e => e.checked = checked)
    this.setState({
   
      arr
    })
}

4、全选和单选的效果已经初步完成 但是会存在缺陷bug 就是当我们点击全选按钮后 并没有针对checkNum进行处理 会导致bug的出现,解决方法:在全选执行的函数中对true||false进行判断,更新checkNum的值(初始化)

allChose = e => {
   
    const checked = e.target.checked;
    const {
   arr} = this.state;
    this.setState({
   
      allChecked: checked
    })
    arr.map(e => e.checked = checked)

    this.setState({
   
      arr
    })
    if(checked){
   
      this.checkNum = arr.length;
    }else{
   
      this.checkNum = 0
    }
  }
相关文章
|
4月前
|
前端开发
React查询、搜索类功能的实现
React查询、搜索类功能的实现
51 0
|
2天前
|
移动开发 前端开发
react项目配合diff实现文件对比差异功能
在React项目中,可以使用`diff`库实现文件内容对比差异功能。首先安装`diff`库,然后在组件中引入并使用`Diff.diffChars`或`Diff.diffLines`方法比较文本差异。通过循环遍历`diff`结果,可以生成不同样式的HTML元素来高亮显示文本差异。
10 1
react项目配合diff实现文件对比差异功能
|
2天前
|
前端开发
react使用antd中的Checkbox实现多选
在React项目中,通过Ant Design的Checkbox组件实现多选。引入Checkbox,使用Checkbox.Group来管理Checkbox,设置`value`属性绑定选中项数组,通过`onChange`更新数组。维护一个全选状态,根据选中项数量与总数决定全选按钮状态。全选按钮的`onChange`事件用于控制所有Checkbox的选中状态。
8 1
react使用antd中的Checkbox实现多选
|
29天前
|
前端开发
|
27天前
|
存储 JavaScript 前端开发
探索React状态管理:Redux的严格与功能、MobX的简洁与直观、Context API的原生与易用——详细对比及应用案例分析
【8月更文挑战第31天】在React开发中,状态管理对于构建大型应用至关重要。本文将探讨三种主流状态管理方案:Redux、MobX和Context API。Redux采用单一存储模型,提供预测性状态更新;MobX利用装饰器语法,使状态修改更直观;Context API则允许跨组件状态共享,无需第三方库。每种方案各具特色,适用于不同场景,选择合适的工具能让React应用更加高效有序。
41 0
|
2月前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
93 1
|
4月前
|
前端开发
React 仿淘宝图片放大镜功能
React 仿淘宝图片放大镜功能
107 0
|
4月前
|
存储 前端开发 JavaScript
【亮剑】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
392 0
|
4月前
|
JavaScript 前端开发
在React和Vue中实现锚点定位功能
在React和Vue中实现锚点定位功能
116 1
|
JavaScript 前端开发
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
前端学习笔记202306学习笔记第五十四天-react.js & material-ui之Dialog表单提交,ICon样式事件,删除功能5
39 0

热门文章

最新文章