首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组(RecoilJS)中删除元素

从数组(RecoilJS)中删除元素
EN

Stack Overflow用户
提问于 2022-03-26 09:41:59
回答 1查看 392关注 0票数 0

我有一个表单,其中我放置了一个浮点值(1.1、1.2、1.9等),我想将其中的一堆存储在一个原子上的数组中:

代码语言:javascript
复制
import { atom } from 'recoil';

export const valueState = atom({
    key: 'values',
    default: []
});

每当我写一个值并且它检查它是一个双值时,这个值就会被添加到valueState中,但是,我想要使它被删除,所以如果我在表单上写的值被删除了,它也会从valueState数组中删除这个值。不过,如果我这样做,程序就会崩溃,我试过使用pop。那我该怎么做呢?

代码语言:javascript
复制
import { valueState as valueStateAtom } from '../../atoms/Atoms';
import { useSetRecoilState } from 'recoil';
const setValue = useSetRecoilState(valueStateAtom);


// The function that handles the onChange event of the form
const setNewValue = (v) => {
   if (v !== '') {
      const valueNumber = parseFloat(v);
      if (!isNaN(valueNumber)) {
         setPageValueChanged(true);
         pageValue = valueNumber;
         // The value gets added to valueState
         setValue((prev) => prev.concat({ valueNumber, cardID }));
      } else {
          setPageValueChanged(false);
      }
   } else {
       setPageValueChanged(false);
       // Delete v from the atom array here
    }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-26 10:07:08

pop不适合您,因为它不返回一个新数组(状态不可变)。

我想你可以和filter玩个把戏。例如

代码语言:javascript
复制
setValue((prev) => prev.filter((value, index) => index !== prev.length - 1));

全码

代码语言:javascript
复制
import { valueState as valueStateAtom } from '../../atoms/Atoms';
import { useSetRecoilState } from 'recoil';
const setValue = useSetRecoilState(valueStateAtom);


// The function that handles the onChange event of the form
const setNewValue = (v) => {
   if (v !== '') {
      const valueNumber = parseFloat(v);
      if (!isNaN(valueNumber)) {
         setPageValueChanged(true);
         pageValue = valueNumber;
         // The value gets added to valueState
         setValue((prev) => prev.concat({ valueNumber, cardID }));
      } else {
          setPageValueChanged(false);
      }
   } else {
       setPageValueChanged(false);
       setValue((prev) => prev.filter((value, index) => index !== prev.length - 1));
    }
};

再来一次反馈,你的concat似乎是不正确的。它期望有一个数组param,但是您传递了一个对象。修改可以是

代码语言:javascript
复制
setValue((prev) => prev.concat([{ valueNumber, cardID }]));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71626920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档