Reassigning to the same Date object generates new copy with empty patches
Mantenedores costumam responder em até 4 dias
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, typescript
- Domínio
- tooling
Direção de pesquisa
Comece com a reprodução vinculada no CodeSandbox e com o ponto de entrada produceWithPatches, verificando o comportamento tanto no modo Proxy quanto no modo ES5 descritos no relatório. A correção estará completa quando reverter uma atribuição de Date retornar a identidade original do array e ainda produzir um conjunto de patches vazio em ambos os ambientes.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
🐛 Bug Report
If you mutate Date property inside produce but then revert it, immer still assumes changes while returning an empty set of patches.
Link to repro
https://codesandbox.io/s/immer-reassigning-breaks-immutabillity-2u7ob
import {enablePatches, produceWithPatches} from "immer"
enablePatches();
type DataObject = {
date: Date;
}
let initialDate = new Date();
let data: DataObject[] = [{date: initialDate}];
let [newData, patches] = produceWithPatches(data, draft => {
let element = draft[0];
let dateBefore = element.date;
element.date = new Date()
element.date = dateBefore;
});
console.log("Patches:", patches) // []
console.log("New Date equal to Initial", newData[0].date === initialDate) // true
console.log("Array equal", newData === data); // expect true but getting false
Environment
Immer version: 9.0.6
- I filed this report against the latest version of Immer
- Occurs with
setUseProxies(true) - Occurs with
setUseProxies(false)(ES5 only)
- Linguagem predominante
- JavaScript
- Estrelas
- 29k
- Forks
- 905
- Merge médio
- 3d 16h
- PRs com merge (30d)
- 22
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de immerjs/immer
-
Shrinking an array with `length =` and growing it back loses the patches for the truncated indicesTalvez já em andamento @RClaudiuM assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 4 dias
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
Mantenedores costumam responder em até 4 dias
-
Docs: Chinese (zh-CN) website translation is outdated vs English docsTalvez livre de novo @lijiayou0728 assumiu há 91 dias e não há nenhum pull request aberto. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
immerjs/immer#1242 · 5 comentários ·
Mantenedores costumam responder em até 4 dias
-
question
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
Mantenedores costumam responder em até 4 dias
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
immerjs/immer#1217 · 1 comentário ·
Mantenedores costumam responder em até 4 dias
Todas as issues de immerjs/immer
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Automattic/node-canvas#2633 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
capricorn86/happy-dom#2594 ·
Mantenedores costumam responder em até 1 dia
-
Decoding tag 1 (epoch date) with an 8-byte integer throws "Cannot mix BigInt and other types"Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 79/100
microsoft/monaco-editor#5575 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 1 dia