Skip to content

SegmentedControl doesn't use updated callback #2493

Closed
@vanjac

Description

@vanjac

Description

The SegmentedControl always calls the first onChangeIndex function it receives. If that callback changes on a later render, it still calls the old version of the function.

Related to

  • Components
  • Demo
  • Docs
  • Typings

Code snippet

const [selectedIndex, setSelectedIndex] = useState(0);
const handleIndexChanged = useCallback((index: number) => {
    console.log("Old index: " + selectedIndex);
    console.log("New index: " + index);
    setSelectedIndex(index);
}, [selectedIndex, setSelectedIndex]);
const segments = [{label: '1'}, {label: '2'}, {label: '3'}, {label: '4'}, {label: '5'}];
return (
    <SegmentedControl segments={segments} initialIndex={selectedIndex}
        onChangeIndex={handleIndexChanged} />
);

Expected behavior

The "old index" logged should always reflect the previous index value, since the callback is updated every time selectedIndex changes.

Actual behavior

The "old index" logged is always 0, because the SegmentedControl always uses the first onChangeIndex it was given.

More Info

Environment

React Native 0.71.1

React Native UI Lib version 6.29.1

Metadata

Metadata

Assignees

Labels

buga bug in one of the components

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions