始终未选中ListItem中的React-Native Switch

时间:2019-04-18 22:34:26

标签: javascript react-native react-native-elements

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

这是我的课程:

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>
    );
  }
}

1 个答案:

答案 0 :(得分:0)

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

检出documentation

  

通过将extraData={this.state}传递给FlatList,我们可以确保FlatList   state.selected更改时,其自身将重新呈现。没有设定   这个道具,FlatList不知道它需要重新渲染任何物品   因为它也是一个PureComponent并且prop比较不会   显示任何更改。

您的情况必须是:

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

这里是工作中的demo