React native 如何更改React Native中的复选框状态

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(

我想在这里更改复选框状态。单击复选框后,不会显示任何更改。但在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((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'}]