reactjs / reactjs/react.dev

[Question] about "._owner.alternate"

Aberta
#1,919 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
JavaScript
Estrelas
11.8k
Forks
7.9k
Merge médio
1d 11h
PRs com merge (30d)
11

Descrição

It seems that in react@16 every React element children contains cyclic property ._owner.alternate.alternate.alternate.alternate....

image

So it is easy to cause "Maximum call stack exceeded" error when developer compares props.children in deep way(like deep-equal).

This caused bugs for community libraries like react-helmet:
https://github.com/nfl/react-helmet/issues/441

I am extremely curious about:
Why React has _owner.alternate, and what it stands for?
As it is named as “_owner”, could it be better if we make “owner” not enumerable?

I tried to search source code and but still can’t find any clue.

Thanks in advance.

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Nenhum arquivo ou teste é mencionado. Comece rastreando o código-fonte do React 16 que cria os filhos dos elementos e a cadeia _owner.alternate, depois revise o react-helmet issue 441 vinculado. Considera-se concluído quando for documentado o que _owner.alternate representa e for resolvido se a questão do enumerable owner exige uma alteração documentada.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
javascript, react
Domínio
documentation
Tipo de issue
Documentação
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
25/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.