我正在尝试在React Native中设置我的第一个Android应用程序。
现在有了这张卡片(react-native-component),里面有多个复选框(参见下面的代码)。
每次我尝试只选中一个复选框时,它都会以某种方式选中所有复选框。
我知道它与多个状态有关,但我不能让它工作。
我怎么能只选中一个复选框?
JavaScript文件:
import React from "react";
import {StyleSheet, ActivityIndicator, ListView, Text, View, Alert, Platform, TouchableOpacity} from 'react-native';
import { Card, CheckBox, Button } from 'react-native-elements';
export default class AgendaItemVote extends React.Component {
constructor(props) {
super(props);
this.state = { checked: false };
}
render(){
return(
<View style={styles.container}>
<Card title="Titel Agendapunt">
<Text style={styles.paragraph}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sapien at tellus interdum finibus. Nunc sagittis tincidunt orci, non viverra ligula feugiat id. Phasellus eleifend massa neque, eu scelerisque enim feugiat ac.
</Text>
<View style={{flexDirection: 'row'}}>
<CheckBox
title='Ja'
checked={this.state.checked}
onPress={() => this.setState({
checked: !this.state.checked
})}
/>
<CheckBox
title='Nee'
checked={this.state.checked}
onPress={() => this.setState({
checked: !this.state.checked
})}
/>
<CheckBox
title='Onthouding'
checked={this.state.checked}
onPress={() => this.setState({
checked: !this.state.checked
})}
/>
</View>
<View>
<Button
title="Indienen"
/>
</View>
</Card>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: 40,
backgroundColor: '#ecf0f1',
},
paragraph: {
margin: 24,
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
color: '#34495e',
},
});发布于 2019-06-18 19:43:01
您必须为每个控件指定一个特定的状态。有一个解决方案可以为您提供:
export default class AgendaItemVote extends React.Component {
constructor(props) {
super(props);
this.state = {
options: [
{
title: 'Ja',
checked: false
},
{
title: 'Nee',
checked: false
},
{
title: 'Onthouding',
checked: false
}
]
};
}
render() {
return (
<View style={styles.container}>
<Card title="Titel Agendapunt">
<Text style={styles.paragraph}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vivamus at sapien at tellus interdum finibus. Nunc
sagittis tincidunt orci, non viverra ligula feugiat id.
Phasellus eleifend massa neque, eu scelerisque enim
feugiat ac.
</Text>
<View style={{ flexDirection: 'row' }}>
{this.state.options.map(opt => (
<CheckBox
title={opt.title}
checked={opt.checked}
key={opt.title}
onClick={() => {
opt.checked = !opt.checked;
this.setState({
options: [
...this.state.options
]
})
}
</View>
<View>
<Button title="Indienen" />
</View>
</Card>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: 40,
backgroundColor: '#ecf0f1'
},
paragraph: {
margin: 24,
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
color: '#34495e'
}
});发布于 2020-07-28 16:37:49
我遇到了类似的问题,在解决了这个问题后,我在这里写下了我的答案。
考虑下面的例子-(带钩子)
const checkboxComponent = () => {
const [checkboxValue, setCheckboxValue] = React.useState([
{ label: 'Customer', value: 'customer', checked: false },
{ label: 'Merchant', value: 'merchant', checked: false },
{ label: 'None', value: 'none', checked: false },
])
const checkboxHandler = (value, index) => {
const newValue = checkboxValue.map((checkbox, i) => {
if (i !== index)
return {
...checkbox,
checked: false,
}
if (i === index) {
const item = {
...checkbox,
checked: !checkbox.checked,
}
return item
}
return checkbox
})
setCheckboxValue(newValue)
}
return (
<View>
{checkboxValue.map((checkbox, i) => (
<View style={styles.checkboxContainer} key={i}>
<CheckBox
value={checkbox.checked}
onValueChange={(value) => checkboxHandler(value, i)}
/>
<Text style={styles.label}>{checkbox.label}</Text>
</View>
))}
</View>
)
}
export default checkboxComponent发布于 2019-06-18 19:27:15
问题就在这里,
checked={this.state.checked}当您将checked设置为true时,将选中每个复选框,因为您在每个复选框中使用此值为this.state.checked。
从所有的checkboxes中删除checked和onPress,如果您想要获得checked checkbox的值,那么可以使用ref。
https://stackoverflow.com/questions/56647946
复制相似问题