Skip to content

Hooks and Flatlist Bug in Update State #24410

Closed
@karvulf

Description

@karvulf

🐛 Bug Report

To Reproduce

Expected Behavior

I am using Hooks in React-Native. I got a problem with my state update, when using FlatList.
If I call a function of the parent inside a rendered item of my flatlist to change a state, the state isn't updated. Although useEffect says that its updated, after the next function call, my state is resetted.

Code Example

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 * @flow
 */

import { FlatList, Text, TouchableOpacity, View } from 'react-native';
import React, { useEffect, useState } from 'react';

import NavigationHandler from '../../hoc/navigationHandler/NavigationHandler';
import OCRImageView from '../../components/main/ocrImageView/OCRImageView';

const data = [1, 2, 3, 4];
const MainScreen = () => {
  const [array, setArray] = useState([]);
  const [counter, setCounter] = useState(0);
  useEffect(() => {
    console.log('array: ', array);
  }, [array]);
  const onPressAdd = () => {
    setArray([...array, counter]);
    setCounter(counter + 1);
  };
  const onPressRemove = () => {};
  const _keyExtractor = (item, index) => index.toString();
  const _renderItem = ({ item }) => {
    return (
      <ChildComponent onPressAdd={onPressAdd} onPressRemove={onPressRemove} />
    );
  };
  return (
    <View>
      <FlatList
        keyExtractor={_keyExtractor}
        data={data}
        renderItem={_renderItem}
      />
    </View>
  );
};

export default MainScreen;

type Props = {
  onPressAdd: () => void,
  onPressRemove: () => void
};
const ChildComponent = ({ onPressAdd, onPressRemove }: Props) => {
  return (
    <View>
      <TouchableOpacity onPress={onPressAdd}>
        <Text>add</Text>
      </TouchableOpacity>
      <TouchableOpacity onPress={onPressRemove}>
        <Text>remove</Text>
      </TouchableOpacity>
    </View>
  );
};

Environment

React Native Environment Info:
System:
OS: macOS High Sierra 10.13.6
CPU: (4) x64 Intel(R) Core(TM) i5-2400S CPU @ 2.50GHz
Memory: 106.48 MB / 14.00 GB
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 11.9.0 - /usr/local/bin/node
Yarn: 1.13.0 - /usr/local/bin/yarn
npm: 6.5.0 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 11.2, macOS 10.13, tvOS 11.2, watchOS 4.2
Android SDK:
API Levels: 23, 25, 26, 27, 28
Build Tools: 23.0.1, 26.0.1, 26.0.3, 27.0.3, 28.0.3
System Images: android-27 | Google Play Intel x86 Atom, android-28 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 3.2 AI-181.5540.7.32.5056338
Xcode: 9.2/9C40b - /usr/bin/xcodebuild
npmPackages:
react: 16.8.3 => 16.8.6
react-native: 0.59.1 => 0.59.1
npmGlobalPackages:
react-native-cli: 2.0.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugComponent: FlatListStaleThere has been a lack of activity on this issue and it may be closed soon.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions