Fiquei curioso para entender como o setState funciona por trás da cortina. Sendo que no projeto temos o state como um objeto com duas propriedades (notas e categoria):
this.state = {
notas: [],
categorias: [],
};E nas funções criarNota, adicionarCategoria, deletarNota setamos o estado atualizado mas passando apenas uma propriedade (notas OU categoria):
deletarNota(index) {
let arrayNotas = this.state.notas;
arrayNotas.splice(index, 1);
this.setState({ notas: arrayNotas });
}Eu imaginaria que no caso acima por exemplo, o setState iria sobrescrever o estado inteiro pelo objeto recebido apenas com as notas, perdendo as informações das categorias.
No entanto, aparentemente o setState é inteligente o bastante para manter tudo como estava e atualizar somente o que foi passado.