Reputation: 8916
How to Change Icon activeIndex via React Native?
I'm using native-base
module, but not work and just activeIndex == 0
is active and my function not work.
Code:
import {Icon, Button} from 'native-base';
type Props = {};
export default class App extends Component<Props> {
constructor(props) {
super(props);
this.segmentClicked = this.segmentClicked.bind(this);
this.state = {
activeIndex: 0
}
}
segmentClicked = (index) => {
this.setState = ({
activeIndex: index
})
}
render() {
return (
<View style={styles.container}>
<View style={{flexDirection: 'row', justifyContent: 'space-around', borderTopWidth: 1, borderTopColor: '#eae5e5'}}>
<Button
onPress={this.segmentClicked(0)}
active={this.state.activeIndex == 0}
>
<Icon name='ios-apps-outline'
style={[this.state.activeIndex == 0 ? {} : {color: 'gray'}]}
/>
</Button>
<Button
onPress={this.segmentClicked(1)}
active={this.state.activeIndex == 1}
>
<Icon name='ios-list-outline'
style={[this.state.activeIndex == 1 ? {} : {color: 'gray'}]}
/>
</Button>
<Button
onPress={this.segmentClicked(2)}
active={this.state.activeIndex == 2}
>
<Icon name='ios-people-outline'
style={[this.state.activeIndex == 2 ? {} : {color: 'gray'}]}
/>
</Button>
<Button
onPress={this.segmentClicked(3)}
active={this.state.activeIndex == 3}
>
<Icon name='ios-bookmark-outline'
style={[this.state.activeIndex == 3 ? {} : {color: 'gray'}]}
/>
</Button>
</View>
</View>
);
}
}
Upvotes: 2
Views: 946
Reputation: 112787
You are calling the function when you write this.segmentClicked(1)
. Instead you want to give a function that will be called when the Button
is pressed.
You can e.g. create a new inlined arrow function.
<Button
onPress={() => this.segmentClicked(1)}
active={this.state.activeIndex == 1}
>
<Icon name='ios-list-outline'
style={[this.state.activeIndex == 1 ? {} : {color: 'gray'}]}
/>
</Button>
You also have to call the setState
function, not assign a new value to it.
segmentClicked = (index) => {
this.setState({
activeIndex: index
});
}
Upvotes: 1