Ты каким-то удивительным образом умеешь понимать и не понимать одновременно...
Если тебе не понятна конструкция !this.state?.done, то перепиши ее в !(this.state?.done). Может так тебе будет понятноей? Ты путаешься с моментом когда именно применяется восклицательный знак, так как он стоит перед this... Но правильно воспринимать не (!this)(.state)(.done), а именно !(this.state?.done), потому что восклицательный знак воздействует на значение конечного элемента, а не на первый элемент, то есть на done, а не на this.
Еще ты можешь сделать так, чтобы было понятней:
// Получаем текущее значение const done: boolean | undefined = this.state?.done; // Записываем в новую переменную измененное значение const newDone: boolean = !done // Записываем стейт this.setState({ done: newDone, });
И можешь в консоли поиграться с такими конструкициями:
!null true !undefined true !'' true
Приведение типов. Отрицание пустого дает истину.