React native 如何更改React Native中的复选框状态
我想在这里更改复选框状态。单击复选框后,不会显示任何更改。但在VS代码中CTR+S后,数据会更新React native 如何更改React Native中的复选框状态,react-native,React Native,我想在这里更改复选框状态。单击复选框后,不会显示任何更改。但在VS代码中CTR+S后,数据会更新 const [data,setData] = React.useState(); React.useEffect(() => { DB.select("tasks","*").then(res=>{ return setData(res); }); }, [100]) const complete = (index,id)=>{ data.forEach(
const [data,setData] = React.useState();
React.useEffect(() => {
DB.select("tasks","*").then(res=>{
return setData(res);
});
}, [100])
const complete = (index,id)=>{
data.forEach((x,k)=>{
if(k == index){
x.status = !x.status;
alert(x.name);
DB.update("tasks",["status"],[x.status],'id=?',[x.id]).then(r=>{
console.log(r);
});
setData(data);
}
});
}
<FlatList
style={css.list}
data={data}
extraData={data}
renderItem={({ item,index }) =>
<View style={css.item}>
<View style={css.textItem}>
<Text>{item.name}</Text>
<Checkbox
status={item.status ? 'checked': 'unchecked'}
onPress={e=>complete(index,id) }
/>
</View>
<View style={css.chip}><Text style={{alignItems: 'center',color: "#009386"}}>Category #1</Text></View>
</View>}
keyExtractor={data => data.id}
/>
您正在设置与状态相同的数据。所以它不会更新
另外
指挥是非常糟糕的做法;y在完整函数中对状态变量进行变异。使用
按如下方式更新您的完整功能:
const complete = (index, id) => {
const updatedData = data.map((x, k) => {
x.status = x.status ? 0 : 1;
DB.update("tasks", ["status"], [x.status], 'id=?', [x.id]).then(r => {
console.log(r);
});
return x;
});
setData(updatedData);
}
正如您所说,状态包含数字0/1,我使用0和1更新检查状态,这与您保存布尔值不同。
我在TS中编码,所以我总是知道类型:您可以共享数据状态数组的值吗?数据=[{更新位置:null,创建位置:null,投诉位置:null,状态:1,cid:1,描述:,名称:'task 1',id:'1'}]