Если я правильно понимаю код, вы переключаете состояние флажка (this.state.checked
) и затем переключаете состояние firebase после нажатия на флажок.Но переключение состояния firebase происходит на основе внутреннего состояния Checkbox, которое, возможно, уже изменилось.Оба являются асинхронными операциями, но, конечно, переключение состояния firebase или запуск метода doneState()
требует больше времени, чем простое переключение внутреннего состояния.
Так что я думаю, что это происходит здесь:
- Флажок
- Внутреннее состояние (
!this.state.checked
) изменяется с false
на true
- Аутентификация Firebase
- Firebase устанавливает значение от
false
на !this.state.checked
=== false
Так что в Firebase ничего не меняется.Попробуйте установить текущее состояние при установке флажка на doneState()
.
Я думаю, это должно работать:
//Done state function with current state property
async doneState(uid, state) {
const { currentUser } = await firebase.auth();
if (currentUser) {
firebase
.database()
.ref(`/Users/${currentUser.uid}/Tasks/${uid}/done`)
.set(!state);
}
}
// UI Render
render(){
return(
<Checkbox
style={{ alignSelf: "center" }}
defaultChecked={item.done}
onChange={() => {
// To be safe here I also changed the order of these commands
this.doneState(item.uid, this.state.checked);
this.setState({
checked: !this.state.checked /* disabled: true */
});
}}
/>
);