我需要做的是-添加/删除数组中每个复选框的名称(由用户选中/未选中),并发送到服务器。我被困在以下代码中。任何帮助都很感激。谢啦
class App extends Component<Props> {
render() {
return (
<View style={{ padding: 15 }}>
{
response.map(
item => {
return (
<CheckBoxItem label={item.name} />
);
}
)
}
</View>
);
}
}
复选框项目。js
class CheckBoxItem extends Component<Props> {
state = {
check: false,
problemTypeArray: [],
}
changeArray = (label) => {
let array = [...this.state.problemTypeArray, label];
let index = array.indexOf(label);
console.log('array', array);//returns array with length 1 all the time
}
render() {
return (
<View>
<CheckBox value={this.state.check} onValueChange={(checkBoolean) => { this.setState({ check: checkBoolean }); this.changeArray(this.props.label); }} />
<MyText>{this.props.label}</MyText>
</View>
);
}
}
export default CheckBoxItem;
真正的诀窍是在父组件中维护选定项的列表。每个CheckBoxItem
都可以控制自己的状态,但每次选中/取消选中时,都需要将值传递回父组件。
由于您尚未显示复选框
组件的来源,我将向您展示如何使用react native元素
复选框
。然后,这些原则可以应用于您自己的复选框
。
这里是App.js
import CheckBoxItem from './CheckBoxItem'
export default class App extends React.Component {
// set some initial values in state
state = {
response: [
{
name:'first'
},
{
name:'second'
},
{
name:'third'
},
{
name:'fourth'
},
{
name:'fifth'
},
{
name:'sixth'
},
],
selectedBoxes: [] // this array will hold the names of the items that were selected
}
onUpdate = (name) => {
this.setState(previous => {
let selectedBoxes = previous.selectedBoxes;
let index = selectedBoxes.indexOf(name) // check to see if the name is already stored in the array
if (index === -1) {
selectedBoxes.push(name) // if it isn't stored add it to the array
} else {
selectedBoxes.splice(index, 1) // if it is stored then remove it from the array
}
return { selectedBoxes }; // save the new selectedBoxes value in state
}, () => console.log(this.state.selectedBoxes)); // check that it has been saved correctly by using the callback function of state
}
render() {
const { response } = this.state;
return (
<View style={styles.container}>
{
response.map(item => <CheckBoxItem label={item.name} onUpdate={this.onUpdate.bind(this,item.name)}/>)
}
</View>
);
}
}
这是CheckBoxItem
import { CheckBox } from 'react-native-elements'
class CheckBoxItem extends Component<Props> {
state = {
check: false, // by default lets start unchecked
}
onValueChange = () => {
// toggle the state of the checkbox
this.setState(previous => {
return { check: !previous.check }
}, () => this.props.onUpdate());
// once the state has been updated call the onUpdate function
// which will update the selectedBoxes array in the parent componetn
}
render() {
return (
<View>
<CheckBox
title={this.props.label}
checked={this.state.check}
onPress={this.onValueChange}
/>
</View>
);
}
}
export default CheckBoxItem;
创建CheckBoxItem
时,会向其传递两个内容。一个是标签,第二个是onUpdate
函数。onUpdate
函数将CheckBoxItem
链接回父组件,以便它可以操作父组件中的状态。
onUpdate
函数获取应用此更新之前的状态值,并查看selectedbox
数组中是否存在复选框的名称。如果它存在于selectedbox
数组中,则会将其删除,否则会将其添加。
现在,父组件中存在一个数组,您可以访问该数组,该数组包含所有已选择的项。
想试试我的代码吗?我已经制作了一种零食,可以证明它是有效的https://snack.expo.io/@andypandy/复选框
您可能已经注意到,我正在使用setState
执行一些不寻常的操作。通过使用状态的上一个值,然后对该值应用我的更新,我确保正确调用setState
。我还利用了这样一个事实,即setState
在状态更新后执行回调操作。如果你想阅读更多,这里有一些关于setState
的好文章。
我目前有以下情况: 我有多个复选框,一旦单击任何复选框,它的值将添加到数组中。如果未选中该复选框,则需要再次将该项从数组中删除。 以下操作有效,并将它们添加到我的中。但当再次选中该复选框时,它不会被删除。当然,我可以使用
我试图创建一个表单,该表单顶部有一个复选框,当用户选中该复选框时,它会选择其他特定的复选框,但不是所有复选框。我很难通过反复试验或搜索找到答案。我唯一能找到的就是“全选”选项。不是我想要的。 理想情况下,当用户选中“管理包”旁边的复选框时,我想要“Chrome外观组”和“远程启动” 下面是代码和我在这方面的基本尝试,但它不起作用。提前谢谢。 超文本标记语言: Javascript 我不知道这个Ja
问题内容: 如何在Firefox中设置复选框样式,并取消选中标记和边框? CSS: HTML: 问题答案: input[type=”checkbox”] {
问题内容: 我有一堆默认情况下处于选中状态的复选框。我的用户可能会取消选中某些复选框(如果有),而其余复选框保持选中状态。 有没有什么办法让表单POST所复选框 不 检查,而不是的那些 被 选中? 问题答案: 为具有不同ID的复选框添加隐藏的输入: 提交表单之前,请根据检查的条件禁用隐藏的输入:
我有一个复选框,其中有一对项目,当我单击该复选框时,该项目将添加到名为currentDevice的状态,但当我取消选中该项目时,它将保留“添加项目”,而不是删除它。 当我取消选中该框时,如何从状态中删除项。Im使用“反应本机元素”复选框。谢谢你 代码:
我希望在选中表中的所有复选框时选中标题复选框,如果没有选中单个复选框,则应取消选中标题复选框。