Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ListItem中的反应本机开关始终未选中_Javascript_React Native_React Native Elements - Fatal编程技术网

Javascript ListItem中的反应本机开关始终未选中

Javascript ListItem中的反应本机开关始终未选中,javascript,react-native,react-native-elements,Javascript,React Native,React Native Elements,我有一个要在平面列表中显示的对象列表。列表项还应具有选择或取消选择条目的开关。但每次我点击开关时,状态保持未选中状态。我不知道这是ListItem组件的错误还是我的代码中的错误。onValueChange事件已正确触发,但在更改状态后,平面列表似乎未重新呈现,或者数据集未更新 以下是我的课程: class Person { constructor() { this._name = ''; this._selected = false; } getName() {

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

以下是我的课程:

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>
    );
  }
}
班级人员{
构造函数(){
这个._name='';
此项。_selected=false;
}
getName(){
返回此。\u名称;
}
集合名(值){
这个._name=value;
}
选举产生(){
返回此项。\u选中;
}
选择的设置(值){
该值为所选值;
}
}
类应用程序扩展组件{
建造师(道具){
超级(道具);
设p1=新人();
p1.设定名称(“超人”);
设p2=新人();
p2.设置名称(“蝙蝠侠”);
让list=[p1,p2];
this.state={persons:list};
}
renderItem=({item,index})=>(
{
让列表=this.state.persons;
列表[索引].setSelected(值);
this.setState({persons:list});
},
}}
/>
);
render(){
返回(
);
}
}

您的代码工作正常,只有FlatList组件的
extraData
属性丢失

签出:

通过将
extraData={this.state}
传递给FlatList,我们确保FlatList 当所选的
状态更改时,其自身将重新呈现。无背景
这个道具,FlatList不会知道它需要重新渲染任何项目
因为它也是一个PureComponent,并且道具比较不会
显示任何更改

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

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


这是一个可行的方法。

尝试不同的变量名。对于要更新的数据,必须进行刷新。创建一个刷新的结构<代码>