【问题标题】:React native: Delete a item from an arrayReact native:从数组中删除一个项目
【发布时间】:2021-08-18 21:37:45
【问题描述】:

我正在尝试从数组中删除一个项目。

假设我有一个包含 5 个项目的数组:[0,1,2,3,4] 如果我删除第 5 项 [4],它可以正常工作。但是如果我删除项目 [1],对象 [2,3,4] 也会被删除。那我做错了什么?

这个函数增加了一个新的可拖动项

  const addshootOutside = index => {
    setShootOutside([
      ...shootOutside,
      <Outside key={index} pageX={positionX} pageY={positionY}/>,
    ]);
  };

这个函数删除一个可拖动的项目

  const deleteHandler = index => {
    const arr = shootOutside.filter((el, i) => index !== i)
    setShootOutside(arr);
  };

这里我称之为“deleteHandler”

  const twoOptionAlertHandler = () => {
    //function to make two option alert
    Alert.alert(
      //title
      'Ta bort',
      //body
      'Är du säker på att du vill ta bort skott?',
      [
        { text: 'OK', onPress: (index) => deleteHandler(index) },
        {
          text: 'Avbryt',
          onPress: () => console.log('No Pressed'),
          style: 'cancel',
        },
      ],
      { cancelable: false }
      //clicking out side of alert will not cancel
    );
  };

这是我的可拖动项目。

  console.log(shootOutside);
  const Outside = () => {
    return (
      <Draggable
        x={200}
        y={200}
        onShortPressRelease={twoOptionAlertHandler}
        renderSize={20}
        renderColor="red"
        renderText="x"
        isCircle
        onDragRelease={e => {
          setPositionY(e.nativeEvent.pageY);
          setPositionX(e.nativeEvent.pageX);
        }}
      />
    );
  };

【问题讨论】:

  • 查看 Array.prototype.shift() 或 stackoverflow.com/questions/5767325/…
  • @Alexander 你需要使用索引作为参数调用 deleteHandler
  • 从 Alert.alert deleteHandler 的 onPress 方法调用时没有索引。因此删除数组中的所有内容
  • 嗯,我更新了我的代码,但它仍然不起作用。我应该如何获取索引?

标签: reactjs react-native draggable


【解决方案1】:

@Alexander 你需要调用deleteHandler 并使用索引作为参数。

Alert.alert 中的Alert.alertonPress 方法deleteHandler 在没有索引的情况下被调用。因此删除数组中的所有内容

我确信您的应用程序将索引作为参数传递应该可以正常工作 例如Alert.alerttwoOptionsHandlerAlert。试试这个:

const twoOptionAlertHandler = () => {
//function to make two option alert
Alert.alert(
  //title
  'Ta bort',
  //body
  'Är du säker på att du vill ta bort skott?',
  [
    { text: 'OK', onPress: () => deleteHandler(indexToDeleteHere) },
    {
      text: 'Avbryt',
      onPress: () => console.log('No Pressed'),
      style: 'cancel',
    },
  ],
  { cancelable: false }
  //clicking out side of alert will not cancel
);

};

其中indexToDeleteHere 是要删除的项目数组中的索引

【讨论】:

  • M,谢谢您的回答。我感觉好傻,但是怎么才能得到索引呢?我已经尝试了很多方法,但是我做错了什么。我更新了我的代码。
  • 不客气,这取决于您希望删除的工作方式。请你解释一下删除是如何工作的。例如,您从用户那里获取输入并用作索引或将常量值设置为索引,这将在每次触发 deleteHandler 时删除特定索引
  • 我从用户那里得到一个值。当用户按下按钮时,会使用函数 (addshootOutside) 创建一个可拖动对象。如果用户想要删除特定的可拖动对象,则用户选择该对象并显示警告并且用户在其中确认他的选择。解释清楚了吗?
猜你喜欢
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多