javascript - 使用通用函数来处理用户在 REACT 中单击时多个基于数组的相似状态的变化

标签 javascript arrays reactjs react-hooks

我在 react 中创建了一个转移列表,其中有两个用于在彼此之间转移名称的框。 (从左列表到右列表)。所以我编写了一个函数handleAllRight,它将左侧列表中的所有元素传输到第二个列表,该列表基本上是数组,并使左侧列表为空,以达到handleAllRight按钮的目的。 现在我又介绍了一个 leftList2 和 rightList2,它们也有一个 handleAllRight 功能。

但是我不会为这两个列表编写一个通用的handleAllRight 函数。 handleAllRight 函数中唯一不同的是列表的编号。 这是我的handleAllRight 函数,我在其中使用了if 循环。但是如果传入任何列表,如何动态创建它。它应该负责检查用户点击的 ID 的传输。

const handleAllRight = listNumber => {
if (listNumber === 1) {
  setRightlist1(leftlist1);
  setleftlist1([]);
}
if(listNumber === 2){
    setRightlist2(leftlist2)
    setleftlist2([]);
}
  };

但我不想使用该条件,因为可能有很多列表,因此它会增加代码行的大小。 我尝试的另一件事是使用 eval 函数。它适用于任意数量的传输列表,但我也不想使用 eval,因为这不是一个好的做法。 例如我这样使用 eval

    const handleAllRight = listNumber => {
        eval(`setRightJobSeq${listNumber}(leftJobSeq${listNumber})`)
        eval(`setleftJobSeq${listNumber}([])`);
}

这是 codeSandbox 链接。 https://codesandbox.io/s/trusting-water-ccymg?file=/src/App.js

最佳答案

使用Eval不是一个好主意。我认为你可以做到这一点。您可以传递 leftList 和函数 setleftlist1setleftlist2setRightList1setRightList2 作为参数并使用 this

访问动态函数
 const handleAllRight = (leftList, setleftlist, setRightList) => {
       this[setRightList](leftList);
       this[setleftlist]([]);
      };

关于javascript - 使用通用函数来处理用户在 REACT 中单击时多个基于数组的相似状态的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62631571/

相关文章:

javascript - ReferenceError:找不到变量:_e_0uWl - 浏览器 "breaks"

java - 为什么 .length() 不是 Java 中的数组方法?

javascript - 一起使用meteor.js、universe-i18n 和react-todos 的示例

javascript - 使用幻灯片过渡移动 div

javascript - underscore _.each 和 forEach 有什么区别?

javascript - 无法启动 'URL' 因为方案没有注册的处理程序

arrays - 嵌套数组结构的 JMESPath 查询

java - 将字节数组转换为字符串 - java

javascript - 如何使用 React JS 围绕 Material UI 组件编写包装器?

javascript - 使用条件和 || 之间的区别在 js 中