Home > Mobile >  No overload matches on FlatList React Native
No overload matches on FlatList React Native

Time:09-23

I am working on my <FlatList> in React Native.

I have the ff flatlist code:

<FlatList
            data={this.state.books}
            keyExtractor={(item, index) => index.toString()}
            renderItem={({item}: {item: any}, index: number) =>
              this.renderItem(item, index)
            }
            ListEmptyComponent={
              <View style={styles.listEmpty}>
                <Text style={styles.emptyText}>Not Reading any books</Text>
              </View>
            }

And then inside my renderItem function:

 renderItem = (item: string, index: number) => (
    <View style={styles.renderContainer}>
      <View style={{flex: 1, justifyContent: 'center', paddingLeft: 10}}>
        <Text>{item}</Text>
      </View>

      <TouchableOpacity onPress={() => console.log('hello')}>
        <View style={styles.btnMarkRead}>
          <Text style={{fontWeight: 'bold', color: 'black'}}>Mark as Read</Text>
        </View>
      </TouchableOpacity>
    </View>
  );

My typescript code is highlighting the word renderItem on my FlatList declaration and it saying:

No overload matches this call.
  Overload 1 of 2, '(props: FlatListProps<String> | Readonly<FlatListProps<String>>): FlatList<String>', gave the following error.
    Type '({ item }: { item: any; }, index: number) => JSX.Element' is not assignable to type 'ListRenderItem<String>'.
  Overload 2 of 2, '(props: FlatListProps<String>, context: any): FlatList<String>', gave the following error.

I have the ff state:

this.state = {
  totalCount: 0,
  readingCount: 0,
  doneCount: 0,
  isAddNewBookVisible: false,
  textInputData: '',
  books: [],
};

What should I do to fix the highlight error?

CodePudding user response:

use

({item, index}) => this.renderItem(item, index)
    

and give type for data passed to Flatlist if you want to refer example below

import React from 'react';
import {FlatList, View} from 'react-native';

interface PropsInterface {}

interface StateInterface {
  books?: any[];
}

class ComponentName extends React.Component<PropsInterface, StateInterface> {
  constructor(props: PropsInterface) {
    super(props);

    this.state = {
      books: [],
    };
  }

  renderItem = (item: any, index: number) => {
    return <View></View>;
  };

  render() {
    return (
      <FlatList
        data={this.state.books}
        renderItem={({item, index}) => this.renderItem(item, index)}
      />
    );
  }
}
  • Related