javascript - 使用 concat 更新 react 状态下的数组

标签 javascript reactjs typescript checkbox setstate

我有一个复选框组件,基本上我想做的是制作选中的数组并将信息发送到 api。 但我无法更新状态数组而不删除最后插入的对象。 我使用 concat 仍然得到相同的结果。 这是整个组件的代码:

import React, { Fragment, Component } from 'react';
import { Inputt, Checkbox } from './style';

interface Istate {
  checked: boolean;
  products?: any[];
}
interface Iprops {
  id: any;
  value: any;
  changeValue?: (checkBoxId: string, value: any) => void;
}
class CheckBoxComp extends Component<Iprops, Istate> {
  state = {
    checked: true,
    products: [] as any,
  };

  addOne = (id: any, checked: any) => {
    let { products } = this.state;
    const newObj = { id, checked };
    products = products.concat(newObj);
    this.setState({ products }, () => {
      console.log(products);
    });
  };

  isChecked = (id: any) => {
    const { checked, products } = this.state;
    const { changeValue } = this.props;
    this.setState({
      checked: !checked,
    });
    if (changeValue) {
      changeValue(id, checked);
    }
    this.addOne(id, checked);
  };

  render() {
    const { id, value } = this.props;
    const { checked, products } = this.state;
    return (
      <Fragment>
        <Checkbox>
          <span />{' '}
          <label className="checkbox-wrapper">
            <span className="display" />
            <Inputt
              type="checkbox"
              value={checked}
              onChange={() => {
                this.isChecked(id);
              }}
            />
            <span className="checkmark" />
          </label>
        </Checkbox>
      </Fragment>
    );
  }
}

export default CheckBoxComp;

最佳答案

您可以尝试这种利用展开运算符来制作数组副本的方法:

addOne = (id: any, checked: any) => {
    this.setState((state: Istate): Partial<Istate> => ({
        products: [
            ...state.products,
            { id, checked },
        ],
    }), () => console.log(this.state.products));
};

关于javascript - 使用 concat 更新 react 状态下的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59443397/

相关文章:

Javascript Cookie 函数仅适用于索引文件

reactjs - Jest 不跟踪符号链接(symbolic link)文件夹中的文件并尝试使用主共享文件夹

typescript - 类中的枚举(TypeScript 定义文件)

javascript - 使用可能存在或可能不存在的接口(interface)修改全局

node.js - 如何在 MatDialog 关闭后刷新组件并在 Angular 6 中更新数据库中的数据?

javascript - 从 json 生成动态标签

javascript - 在javascript DOM元素更改后将php变量插入数据库

javascript - console.log(name) 中的奇怪问题

reactjs - 将 clerk 与 supabase 集成的最佳实践

javascript - 有没有一种简单的方法可以调整 Framer Motion 中可拖动元素的动量/惯性?