restate / v1.0.0
Perguntas frequentes
Respostas para dúvidas comuns sobre renderização, salvamento, scopes e erros no restate.
Nenhuma pergunta encontrada
Tente outra palavra ou mostre todas as perguntas.
BásicoPreciso de um Provider?
Não. Um store é um valor no nível do módulo; qualquer componente que o importe pode usá-lo. Use useRestateScope quando o estado deve pertencer a uma instância de componente.
BásicoPor que meu componente renderiza a cada mudança?
Chamar o hook sem selector assina o valor inteiro. Passe um selector que retorne só o que o componente mostra.
BásicoMeu selector retorna um objeto e renderiza toda vez.
Um objeto novo nunca é igual ao anterior por Object.is. Passe shallow como segundo argumento ou selecione os campos separadamente.
BásicoMudei um objeto, mas nada foi atualizado.
set recebeu o mesmo objeto, então o restate não viu mudança. Retorne um objeto ou array novo em set.
SalvamentoOnde eu espero os dados salvos?
Uma vez, na entrada do cliente: faça await restateManager.ready antes de renderizar o app. Depois, os componentes leem os valores salvos diretamente. Stores em um useRestateScope esperam o próprio scope.manager.ready.
SalvamentoQuando os dados são gravados no armazenamento?
Só quando você chama save() ou, com autoSave ligado, depois das mudanças. Editar muda a memória; status().dirty avisa que há alterações não salvas.
SalvamentoDevo usar autoSave ou save()?
Use autoSave para configurações e rascunhos que devem persistir sempre. Use save() quando o usuário decide, como em um botão Salvar ou no envio de um formulário. Dá para chamar save() mesmo com autoSave ligado, por exemplo em pagehide.
ErrosrestateManager.ready foi rejeitado. E agora?
Ele é rejeitado com BULK_OPERATION_FAILED quando um registro não pôde ser lido, migrado ou validado. error.failures lista cada store e o erro dele. Corrija ou limpe o registro, chame o initialize() desse store e acesse ready de novo.
ErrosAparece QUEUE_FULL ou STORAGE_TIMEOUT.
O armazenamento está mais lento que o trabalho que você enfileira. Evite chamar save() em um loop apertado — um salvamento na fila já pega o valor mais recente — ou use autoSave com espera. Ajuste maxPendingOperations e operationTimeoutMs se precisar.
ErrosUma requisição atrasada grava em um store depois da desmontagem.
set() e reset() em um store destruído são ignorados, como uma atualização de estado do React depois da desmontagem. Assinar lança STORE_DESTROYED e os comandos de armazenamento são rejeitados.
ScopesMeu store com scope ignora props novas.
A factory roda uma vez, como um inicializador de useState. Renderize o componente com uma key por documento para que cada documento novo ganhe um scope novo.
ScopesComo evito diferenças na hidratação?
Passe os mesmos dados do servidor como props no servidor e no cliente, e crie o store a partir deles em useRestateScope. O valor inicial vira o snapshot do servidor.
ScopesPor que meu store com scope não está em restateManager.ready?
Stores salvos com scope começam a carregar depois que o componente dono é confirmado no cliente. Espere scope.manager.ready em um limite de carregamento dentro desse componente.
SalvamentoMMKV_UNAVAILABLE no React Native.
Instale react-native-mmkv e as dependências nativas dele e recompile o app. No Expo, use uma development build. Stores em memória funcionam sem MMKV.