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
    }
  }
目录
相关文章
|
7月前
|
前端开发
React查询、搜索类功能的实现
React查询、搜索类功能的实现
69 0
|
15天前
|
存储 前端开发 UED
React 中的多选按钮(Checkbox)
本文详细介绍了在 React 中实现多选按钮(Checkbox)的方法,包括基础用法、常见问题及解决策略、进阶技巧如使用受控组件和第三方库,旨在帮助开发者更好地理解和应用多选按钮组件。
64 19
|
2月前
|
移动开发 前端开发 JavaScript
React DnD:实现拖拽功能的终极方案?
本文首发于微信公众号“前端徐徐”,介绍了一个强大的 React 拖拽库——React DnD。React DnD 帮助开发者轻松创建复杂的拖拽界面,适用于 Trello 风格的应用、列表重排序、可拖拽的 UI 组件等场景。文章详细介绍了 React DnD 的基本信息、主要特点、使用场景及快速上手指南。
164 3
React DnD:实现拖拽功能的终极方案?
|
3月前
|
移动开发 前端开发
react项目配合diff实现文件对比差异功能
在React项目中,可以使用`diff`库实现文件内容对比差异功能。首先安装`diff`库,然后在组件中引入并使用`Diff.diffChars`或`Diff.diffLines`方法比较文本差异。通过循环遍历`diff`结果,可以生成不同样式的HTML元素来高亮显示文本差异。
159 1
react项目配合diff实现文件对比差异功能
|
3月前
|
前端开发
react使用antd中的Checkbox实现多选
在React项目中,通过Ant Design的Checkbox组件实现多选。引入Checkbox,使用Checkbox.Group来管理Checkbox,设置`value`属性绑定选中项数组,通过`onChange`更新数组。维护一个全选状态,根据选中项数量与总数决定全选按钮状态。全选按钮的`onChange`事件用于控制所有Checkbox的选中状态。
164 1
react使用antd中的Checkbox实现多选
|
2月前
|
前端开发 JavaScript API
2025年前端框架是该选vue还是react?有了大模型-例如通义灵码辅助编码,就不用纠结了!vue用的多选react,react用的多选vue
本文比较了Vue和React两大前端框架,从状态管理、数据流、依赖注入、组件管理等方面进行了详细对比。当前版本和下载量数据显示React更为流行,但Vue在国内用户量增长迅速。Vue 3通过组合式API提供了更灵活的状态管理和组件逻辑复用,适合中小型项目;React则更适合大型项目和复杂交互逻辑。文章还给出了选型建议,强调了多框架学习的重要性,认为技术问题已不再是选型的关键,熟悉各框架的最佳实践更为重要。
101 0
|
3月前
|
存储 移动开发 前端开发
初探react,用react实现一个todoList功能
该文章通过创建一个TodoList应用来介绍React的基础知识,包括环境搭建、组件创建、状态管理和事件处理,并演示了如何使用React Hooks来优化组件逻辑。
|
4月前
|
前端开发
|
4月前
|
存储 JavaScript 前端开发
探索React状态管理:Redux的严格与功能、MobX的简洁与直观、Context API的原生与易用——详细对比及应用案例分析
【8月更文挑战第31天】在React开发中,状态管理对于构建大型应用至关重要。本文将探讨三种主流状态管理方案:Redux、MobX和Context API。Redux采用单一存储模型,提供预测性状态更新;MobX利用装饰器语法,使状态修改更直观;Context API则允许跨组件状态共享,无需第三方库。每种方案各具特色,适用于不同场景,选择合适的工具能让React应用更加高效有序。
96 0
|
5月前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
188 1