Bird
Raised Fist0
React Nativemobile~15 mins

ListEmptyComponent in React Native - Mini App: Build & Ship

Choose your learning style10 modes available
Build: Simple List with Empty Message
This screen shows a list of items. If the list is empty, it shows a friendly message to the user.
Target UI
-------------------------
| Simple List Screen     |
|-----------------------|
|                       |
|  - Item 1             |
|  - Item 2             |
|  - Item 3             |
|                       |
|-----------------------|
Use FlatList to display a list of strings.
If the list is empty, show a centered message: 'No items available.'
The empty message should be styled with gray color and centered text.
Use a functional component with React hooks.
Starter Code
React Native
import React from 'react';
import { View, Text, FlatList, StyleSheet } from 'react-native';

export default function SimpleList() {
  const data = [];

  return (
    <View style={styles.container}>
      <FlatList
        data={data}
        keyExtractor={(item, index) => index.toString()}
        renderItem={({ item }) => <Text style={styles.item}>{item}</Text>}
        // TODO: Add ListEmptyComponent here
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 50,
    paddingHorizontal: 20
  },
  item: {
    fontSize: 18,
    paddingVertical: 10
  }
});
Task 1
Task 2
Task 3
Solution
React Native
import React from 'react';
import { View, Text, FlatList, StyleSheet } from 'react-native';

export default function SimpleList() {
  const data = [];

  const renderEmpty = () => (
    <View style={styles.emptyContainer}>
      <Text style={styles.emptyText}>No items available.</Text>
    </View>
  );

  return (
    <View style={styles.container}>
      <FlatList
        data={data}
        keyExtractor={(item, index) => index.toString()}
        renderItem={({ item }) => <Text style={styles.item}>{item}</Text>}
        ListEmptyComponent={renderEmpty}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 50,
    paddingHorizontal: 20
  },
  item: {
    fontSize: 18,
    paddingVertical: 10
  },
  emptyContainer: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    marginTop: 50
  },
  emptyText: {
    fontSize: 18,
    color: 'gray',
    textAlign: 'center'
  }
});

We added the ListEmptyComponent prop to the FlatList. This prop takes a component that will be shown when the list has no items.

The renderEmpty function returns a View with a Text inside that says "No items available." We styled it to be gray and centered so it looks friendly and clear.

This way, when the data array is empty, the user sees a helpful message instead of a blank screen.

Final Result
Completed Screen
-------------------------
| Simple List Screen     |
|-----------------------|
|                       |
|   No items available. |
|                       |
|                       |
|                       |
|-----------------------|
When the list is empty, the message 'No items available.' appears centered on the screen.
If you add items to the data array, the list will show those items instead of the message.
Stretch Goal
Add a button that adds a new item to the list when pressed.
💡 Hint
Use React useState to hold the list data and update it when the button is pressed.

Practice

(1/5)
1. What is the purpose of the ListEmptyComponent prop in a React Native FlatList?
easy
A. To display a view when the list has no data
B. To style each item in the list
C. To handle item clicks in the list
D. To load more data when scrolling

Solution

  1. Step 1: Understand the role of ListEmptyComponent

    This prop is designed to show a special view when the list has no items to display.
  2. Step 2: Compare with other props

    Other props like styling or click handling do not relate to empty list views.
  3. Final Answer:

    To display a view when the list has no data -> Option A
  4. Quick Check:

    Empty list view = ListEmptyComponent [OK]
Hint: Empty list? Use ListEmptyComponent to show a message [OK]
Common Mistakes:
  • Confusing ListEmptyComponent with item styling
  • Thinking it handles clicks
  • Assuming it loads more data
2. Which of the following is the correct way to use ListEmptyComponent in a FlatList?
easy
A. Text('No items')} />
B.
C. No items} />
D.

Solution

  1. Step 1: Check the correct syntax for ListEmptyComponent

    It accepts a component or a function returning a component. No items} /> uses a function returning a Text component.
  2. Step 2: Identify incorrect usages

    calls Text as a function incorrectly. Text('No items')} /> calls Text incorrectly inside the function. passes a string, which is invalid.
  3. Final Answer:

    <FlatList data={[]} ListEmptyComponent={() => <Text>No items</Text>} /> -> Option C
  4. Quick Check:

    Function or component = ListEmptyComponent [OK]
Hint: Use a function returning JSX for ListEmptyComponent [OK]
Common Mistakes:
  • Passing a string instead of a component
  • Calling component as a function incorrectly
  • Not using a function when needed
3. Given this code snippet, what will be displayed when the list is empty?
import React from 'react';
import { FlatList, Text } from 'react-native';

export default function MyList() {
  return (
    <FlatList
      data={[]}
      renderItem={({ item }) => <Text>{item}</Text>}
      ListEmptyComponent={() => <Text>No data found</Text>}
    />
  );
}
medium
A. Nothing is displayed
B. No data found
C. An error occurs
D. The list shows empty spaces

Solution

  1. Step 1: Check the data prop

    The data array is empty, so no items will render.
  2. Step 2: Check ListEmptyComponent behavior

    Since the list is empty, the component returned by ListEmptyComponent will display the text "No data found".
  3. Final Answer:

    No data found -> Option B
  4. Quick Check:

    Empty list triggers ListEmptyComponent [OK]
Hint: Empty data triggers ListEmptyComponent display [OK]
Common Mistakes:
  • Expecting no output when list is empty
  • Thinking renderItem runs with empty data
  • Assuming an error occurs
4. Identify the error in this FlatList usage:
<FlatList
  data={[]}
  renderItem={({ item }) => <Text>{item}</Text>}
  ListEmptyComponent={Text('No items')}
/>
medium
A. ListEmptyComponent should be a component or function, not a function call
B. renderItem is missing a key prop
C. data cannot be an empty array
D. Text component cannot be used inside FlatList

Solution

  1. Step 1: Analyze ListEmptyComponent usage

    It is set to Text('No items'), which calls the Text function incorrectly instead of passing a component or function.
  2. Step 2: Check other props

    renderItem is correct for empty data (though keys are recommended but not error here). Empty data is allowed. Text can be used inside FlatList.
  3. Final Answer:

    ListEmptyComponent should be a component or function, not a function call -> Option A
  4. Quick Check:

    Pass component/function, not call it [OK]
Hint: Pass component/function to ListEmptyComponent, not call it [OK]
Common Mistakes:
  • Calling component instead of passing it
  • Confusing renderItem keys with ListEmptyComponent errors
  • Thinking empty data is invalid
5. You want to show a custom message with a button when your FlatList is empty. Which is the best way to implement ListEmptyComponent to achieve this?
hard
A. Set ListEmptyComponent to null and show message outside the list
B. Pass a string with the message directly to ListEmptyComponent
C. Use renderItem to render the message when data is empty
D. Pass a function returning a view with text and button JSX

Solution

  1. Step 1: Understand the requirement

    You want a message plus a button inside the empty list view, so you need a component that returns JSX with both elements.
  2. Step 2: Evaluate options

    Pass a function returning a view with text and button JSX correctly uses a function returning a view with text and button. Pass a string with the message directly to ListEmptyComponent is invalid because ListEmptyComponent does not accept strings. Use renderItem to render the message when data is empty misuses renderItem which only renders list items. Set ListEmptyComponent to null and show message outside the list moves the message outside the list, which is less integrated.
  3. Final Answer:

    Pass a function returning a view with text and button JSX -> Option D
  4. Quick Check:

    Use function returning JSX for custom empty view [OK]
Hint: Use function returning JSX with button for custom empty view [OK]
Common Mistakes:
  • Passing string instead of component
  • Misusing renderItem for empty state
  • Placing message outside FlatList
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard