无法在平面列表renderItem中使用删除功能

时间:2019-06-02 18:10:32

标签: react-native react-native-flatlist setstate

删除功能在flatlist renderItem方法中不起作用,但是如果我使用地图函数而不是flatlsit来呈现数据,它将完全正常工作。

这是示例代码

class App extends Component {
  state = {
    todos: [
      { todo: 'go to gym', id: 1 },
      { todo: 'buy a mouse', id: 2 },
      { todo: 'practice hash table', id: 3 },
      { todo: 'iron clothes', id: 4 }
    ]
  };

  keyExtractor = item => item.id.toString();

  handleDelete = id => {
    const todos = this.state.todos.filter(item => item.id !== id);
    this.setState({ todos });
  };

  renderItems({ item }) {
    return (
      <View
        style={{
          display: 'flex',
          flexDirection: 'row',
          justifyContent: 'space-between'
        }}
      >
        <Text style={{ fontSize: 16 }}>{item.todo}</Text>
        <TouchableOpacity
          onPress={() => this.handleDelete(item.id)}
          style={{ marginRight: 15 }}
        >
          <Text style={{ color: 'red' }}>Delete</Text>
        </TouchableOpacity>
      </View>
    );
  }

  render() {
    return (
      <View>
        {/* {this.renderItems()} */}
        <FlatList
          data={this.state.todos}
          keyExtractor={this.keyExtractor}
          renderItem={this.renderItems}
        />
      </View>
    );
  }
}

我不明白它给我_this2.handleDelete错误不是函数的原因。

1 个答案:

答案 0 :(得分:2)

您没有绑定函数,在构造函数中绑定了函数或使用数组函数

renderItems = ({ item }) => {

  return (
    <View
      style={{
        display: 'flex',
        flexDirection: 'row',
        justifyContent: 'space-between',
      }}>
      <Text style={{ fontSize: 16 }}>{item.todo}</Text>
      <TouchableOpacity
        onPress={() => this.handleDelete(item.id)}
        style={{ marginRight: 15 }}>
        <Text style={{ color: 'red' }}>Delete</Text>
      </TouchableOpacity>
    </View>
  );
}