react-native:如何在平面列表中呈现复选框

kir*_*imi 3 javascript react-native

checkbox在平面列表中创建了一个,但是当我单击复选框时,所有复选框都会呈现。我想渲染我按下的复选框而不是整个复选框。

这是我的代码:

const list = [
  {
    name: 'Kevin',
    id:0
  },
  {
    name: 'John',
    id:1
  },
]
export default class TestingScreen extends Component {
  constructor(props) {
    super(props)
    this.state = {
      checked: false
    }
  }

  handleCheckBox = () => this.setState({ checked: !this.state.checked })

  renderItem = ({ item }) => (
    <ListItem
      title={<View><Text>{item.name}</Text></View>}r
      leftAvatar={
        <View>
        <Image
                  style={{width:50, height:50,borderRadius:25 }}
                  source={require('../Components/Assets/oval.png')} />
        </View>
      }
      rightAvatar={
        <CheckBox
          checked={this.state.checked}
          onPress={() => this.setState({checked: !this.state.checked})}
        />
      }
    >
    </ListItem>

  )

  render() {
  return(
    <View style={styles.container}>
    <FlatList
         keyExtractor={this.keyExtractor}
         data={list}
         renderItem={this.renderItem}
         extraData={this.state}
       />
      </View>
    )
  };
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以渲染我按下的复选框?任何评论或建议都会非常有帮助,谢谢!:)

Aut*_*cat 5

您对所有复选框使用相同的状态变量。单击其中一个复选框将更新checked您为所有复选框提供的单个全局变量。

您必须创建一个具有自己状态的复选框组件,或者更新用于呈现不同项目的列表内的变量。

例如:

1)将列表变量移动到添加选中键的状态内:

const list = [
  {
    name: 'Kevin',
    id:0,
    checked:false
  },
  {
    name: 'John',
    id:1,
    checked:false
  },
] 



 this.state = {
  list: list
}
Run Code Online (Sandbox Code Playgroud)

2)使用状态进入flatList数据:

<FlatList
     keyExtractor={this.keyExtractor}
     data={this.state.list}
     renderItem={this.renderItem}
     extraData={this.state}
/>
Run Code Online (Sandbox Code Playgroud)

3)更改checkBox的onPress:

<CheckBox
      checked={this.state.list[item.id].checked}
      onPress={() => this.checkThisBox(item.id)}
    />
Run Code Online (Sandbox Code Playgroud)

在哪里:

checkThisBox=(itemID)=>{
   let list=this.state.list
   list[itemID].checked=!list[itemID].checked
   this.setState({list:list})
}
Run Code Online (Sandbox Code Playgroud)