gpt4 book ai didi

javascript - 列表项中的 React-Native 开关始终未选中

转载 作者:行者123 更新时间:2023-11-30 19:37:48 24 4
gpt4 key购买 nike

我有一个要在 FlatList 中显示的对象列表。列表项还应该有一个开关来选择或取消选择条目。但每次我点击开关时,状态都保持未选中状态。我不知道这是 ListItem 组件的错误还是我的代码中的错误。 onValueChange 事件被正确触发,但似乎 FlatList 在更改状态后未重新呈现或数据集未更新...

这是我的类(class):

class Person {
constructor() {
this._name = '';
this._selected = false;
}

getName() {
return this._name;
}

setName(value) {
this._name = value;
}

isSelected() {
return this._selected;
}

setSelected(value) {
this._selected = value;
}
}

class App extends Component {
constructor(props) {
super(props);
let p1 = new Person();
p1.setName('Superman');
let p2 = new Person();
p2.setName('Batman');
let list = [ p1, p2 ];
this.state = { persons: list };
}

renderItem = ({item, index}) => (
<ListItem
title={item.getName()}
switch={{
value: item.isSelected(),
onValueChange: (value) => {
let list = this.state.persons;
list[index].setSelected(value);
this.setState({ persons: list });
},
}}
/>
);

render() {
return (
<View style={styles.container}>
<FlatList
data={this.state.persons}
renderItem={this.renderItem}
/>
</View>
);
}
}

最佳答案

您的代码工作正常,只是缺少 FlatList 组件的 extraData 属性。

检查 documentation :

By passing extraData={this.state} to FlatList we make sure FlatList itself will re-render when the state.selected changes. Without setting this prop, FlatList would not know it needs to re-render any items because it is also a PureComponent and the prop comparison will not show any changes.

在你的情况下,它必须是:

<FlatList
data={this.state.persons}
renderItem={this.renderItem}
extraData={this.state}
/>

这是一个有效的 demo .

关于javascript - 列表项中的 React-Native 开关始终未选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55754491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com