【问题标题】:Cant Delete item from flatlist无法从平面列表中删除项目
【发布时间】:2018-10-04 02:21:16
【问题描述】:

我试图通过触摸从我的平面列表中删除一个项目,但我无法这样做。我知道我需要将触摸的索引传递给我的 deleteMessage() 函数,但我不知道该怎么做。

deleteMessage(item) {
    console.log("delete message!");
    console.log(item);
    index = this.state.messageList.indexOf(item);
    console.log(index);
    let newList = this.state.messageList.splice(index, 1);
    console.log(newList);
    this.setState({
      messageList: newList

    });
  }

  renderMessage(message) {
    console.log(message.item);
    return (
      <TouchableHighlight onPress={()=> this.deleteMessage()}>
        <Text style={styles.message}> {message.item} </Text>
      </TouchableHighlight>
    );
  }

  render() {
    return (
      <View style={styles.container}>
        <FlatList  
          style={styles.listContainer}
          data={this.state.messageList}
          renderItem={item => this.renderMessage(item)}
        />
        <View style={styles.sendContainer}>
          <TextInput
            style={styles.TextInputStyle}
            onChangeText={text => this.handleInputMessage(text)}
            placeholder="type message here"
            value={this.state.message}
          />
          <Button onPress={() => this.handleSubmitMessage()} title="sennd" />
        </View>
      </View>
    );
  }
}

【问题讨论】:

    标签: javascript arrays reactjs react-native


    【解决方案1】:

    这样做:

    deleteMessage(item) {
        var messageList = [...this.state.messageList]
        let index = messageList.indexOf(item);
        messageList.splice(index, 1);
        this.setState({ messageList });
    }
    

    ... 被称为Spread Operator,在上面的代码中,它复制了this.state.messageList 数组。因此,当您对其进行任何更改时,您将更改 messageList 数组中的内容,而不是 this.state.messageList 数组

    您的代码中的问题是:

    1. 您正在通过直接在 this.state.messageList 上调用 .splice() 来改变状态

    2. .splice() 返回已删除的项目,而不是剩余的项目,因此,在您对您的状态调用 .splice() 后,您的新列表仅包含您已删除的项目

    玩得开心!

    【讨论】:

    • 你能不能成为一个好伙伴,如果它解决了你的问题,请接受答案吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2020-01-27
    相关资源
    最近更新 更多