我们如何 Check/Uncheck 基于索引或在 react-native flatlist 中按键的 flatlist 中的单个复选框
How can we Check/Uncheck individual checkbox in flatlist based on index or by key in react-native flatlist
有状态值
savedData:{
firstName: '',
lastName: '',
mobile: '',
email: '',
password: '',
forgotPassword: '',
checkbox1: false,
checkbox2: false
}
文本输入和复选框在平面列表中,每个文本输入和复选框在每个单元格中呈现。如何在调用复选框的 onClick 时通过索引更新数组中复选框的值,而不使用状态变量或全局变量?
我正在更新文本输入值,如下所示
<Input
placeholder={item.key}
placeholderTextColor={'grey'}
onChangeText={this.updateText.bind(this,item.key)}
onSubmitEditing={ (event) => console.log(event)}
underlineColorAndroid="transparent"
/>
updateText(text,key){
var change = this.state.savedData;
var string1 = key;
change[text] = string1;
this.setState({ savedData: change });
}
如何在不使用状态变量或全局变量的情况下通过索引或基于键更新 checkbox1 和 checkbox2 的值,并在 savedData 对象中更新。
从 'react-native-check-box' 导入复选框;
export default class CheckBox extends React.Component {
constructor(props) {
super(props)
this.state = {
data: [{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
},
{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
},
{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
}],
}
}
isCheckedOrNot(type, item, index) {
if (type === 'cb1') {
this.state.data[index].checked1 = !this.state.data[index].checked1;
} else {
this.state.data[index].checked2 = !this.state.data[index].checked2;
}
this.setState({
data: this.state.data
})
}
renderItem({ item, index }) {
return (
<View style={{ flexDirection: 'row', margin: 10 }}>
<Text style={{ marginLeft: 5 }}> {item.firstname} </Text>
<Text style={{}}> {item.lastname}, </Text>
<CheckBox
value={item.isChecked1}
onClick={() => {
this.isCheckedOrNot('cb1', item, index)
}}
isChecked={item.checked1}
/>
<Text style={{ marginLeft: 5 }}> checkbox 1</Text>
<CheckBox
onClick={() => {
this.isCheckedOrNot('cb2', item, index)
}}
isChecked={item.checked2}
/>
<Text style={{ marginLeft: 5 }}> checkbox 2</Text>
</View>
)
}
render() {
return (
<View style={{ flex: 1 }}>
<FlatList
data={this.state.data}
renderItem={this.renderItem.bind(this)}
showsVerticalScrollIndicator={false}
/>
</View>
)
}
}
希望对您有所帮助
有状态值
savedData:{
firstName: '',
lastName: '',
mobile: '',
email: '',
password: '',
forgotPassword: '',
checkbox1: false,
checkbox2: false
}
文本输入和复选框在平面列表中,每个文本输入和复选框在每个单元格中呈现。如何在调用复选框的 onClick 时通过索引更新数组中复选框的值,而不使用状态变量或全局变量?
我正在更新文本输入值,如下所示
<Input
placeholder={item.key}
placeholderTextColor={'grey'}
onChangeText={this.updateText.bind(this,item.key)}
onSubmitEditing={ (event) => console.log(event)}
underlineColorAndroid="transparent"
/>
updateText(text,key){
var change = this.state.savedData;
var string1 = key;
change[text] = string1;
this.setState({ savedData: change });
}
如何在不使用状态变量或全局变量的情况下通过索引或基于键更新 checkbox1 和 checkbox2 的值,并在 savedData 对象中更新。
从 'react-native-check-box' 导入复选框;
export default class CheckBox extends React.Component {
constructor(props) {
super(props)
this.state = {
data: [{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
},
{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
},
{
firstname: 'abc',
lastname: 'xyz',
checked1: false,
checked2: false,
}],
}
}
isCheckedOrNot(type, item, index) {
if (type === 'cb1') {
this.state.data[index].checked1 = !this.state.data[index].checked1;
} else {
this.state.data[index].checked2 = !this.state.data[index].checked2;
}
this.setState({
data: this.state.data
})
}
renderItem({ item, index }) {
return (
<View style={{ flexDirection: 'row', margin: 10 }}>
<Text style={{ marginLeft: 5 }}> {item.firstname} </Text>
<Text style={{}}> {item.lastname}, </Text>
<CheckBox
value={item.isChecked1}
onClick={() => {
this.isCheckedOrNot('cb1', item, index)
}}
isChecked={item.checked1}
/>
<Text style={{ marginLeft: 5 }}> checkbox 1</Text>
<CheckBox
onClick={() => {
this.isCheckedOrNot('cb2', item, index)
}}
isChecked={item.checked2}
/>
<Text style={{ marginLeft: 5 }}> checkbox 2</Text>
</View>
)
}
render() {
return (
<View style={{ flex: 1 }}>
<FlatList
data={this.state.data}
renderItem={this.renderItem.bind(this)}
showsVerticalScrollIndicator={false}
/>
</View>
)
}
}
希望对您有所帮助