javascript - 如何在 React Native FlatList 中按下组件时更改其颜色

标签 javascript react-native jsx

我一直在尝试开发一个包含来自数据源的卡片和列表项的列表。我已经成功地调出了列表,但我想要实现的是,当用户触摸列表中的项目时,该项目的颜色应该改变。

最重要的是仅应选择一项。如何实现这一目标?我通过使用 redux 操作和化简器获取了数据的值(value)。但是,我不知道如何实现这个选择过程。

我的 flatList 代码:

 <FlatList
    horizontal={true}
    data={this.qtyList}
    keyExtractor={item => item.id.toString()}
    showsHorizontalScrollIndicator={false}
    renderItem={({ item }) => (
            <TouchableHighlight 
            onPress={() => {

            }}
            >
            <Card
            containerStyle={{  borderRadius: 5 }}
            >
            <Text>
            {item.qty}
            </Text>
            </Card>
        </TouchableHighlight>
    )}
/>

请提供逐步说明,因为我完全是初学者。我不想在 redux 的帮助下做到这一点,所以组件级别的状态会有很大的帮助。

最佳答案

您需要一个在用户单击 FlatList 的项目时设置状态的函数。当状态改变时,组件样式将改变以显示所选项目。并且您应该将 extraData 设置为 FlatList,以便在状态发生变化时进行渲染。

class Second extends React.Component {    
    constructor(props) {
        super(props);
        this.state = {
            selectedItem: null
        };
    }

    onPressHandler(id) {
        this.setState({selectedItem: id});
    }

    render() {
        return (
            <View>
                <FlatList
                    extraData={this.state.selectedItem} //Must implemented
                    horizontal={true}
                    data={qtyList}
                    keyExtractor={item => item.id.toString()}
                    showsHorizontalScrollIndicator={false}
                    renderItem={({item}) => (
                        <TouchableOpacity
                            onPress={() => this.onPressHandler(item.id)}>
                            <Card
                                containerStyle={this.state.selectedItem === item.id ? {
                                    borderRadius: 5,
                                    backgroundColor: "#000000"
                                } : {borderRadius: 5, backgroundColor: "#a1a1a1"}}>
                                <Text>{item.qty}</Text>
                            </Card>
                        </TouchableOpacity>
                    )}
                />
            </View>
        );
    }
}

关于javascript - 如何在 React Native FlatList 中按下组件时更改其颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094518/

相关文章:

javascript - 如何使页面自动滚动到内容中的元素?

javascript - 使用 CSS float 的动态布局宽度

react-native - 在 TextInput React Native 中禁用返回键

javascript - 在 React Native 中根据时间轴绘制移动加速度计的实时数据

reactjs - 如何将 React 元素和文本组合到三元组中?

javascript - 奇怪的 angularJs 变量行为

javascript - 无法使用 Angular.js/Javascript 比较日期

react-native - react 导航 : Utilizing deep linking with Redux

reactjs - 如何将 Adsense 添加到使用 GatsbyJS 构建的网站?

css - 无法在 Div 中居中图像