Existe uma maneira de passar um componente para outro componente de reação? Desejo criar um componente de reação do modelo e passar outro componente de reação para transcluir esse conteúdo.
Edit: Aqui está um codepen reactJS ilustrando o que estou tentando fazer. http://codepen.io/aallbrig/pen/bEhjo
HTML
<div id="my-component">
<p>Hi!</p>
</div>
ReactJS
/**@jsx React.DOM*/
var BasicTransclusion = React.createClass({
render: function() {
// Below 'Added title' should be the child content of <p>Hi!</p>
return (
<div>
<p> Added title </p>
{this.props.children}
</div>
)
}
});
React.renderComponent(BasicTransclusion(), document.getElementById('my-component'));
javascript
reactjs
Andrew Allbright
fonte
fonte
this.props.children
faz parte da API do componente e espera-se que seja usado dessa maneira. Os exemplos da equipe do React usam essa técnica, como na transferência de objetos e quando se fala de um único filho .Observe que forneci uma resposta mais aprofundada aqui
Wrapper de tempo de execução:
É a maneira mais idiomática.
Observe que
children
é um "suporte especial" no React, e o exemplo acima é açúcar sintático e é (quase) equivalente a<Wrapper children={<App/>}/>
Wrapper de inicialização / HOC
Você pode usar um componente de ordem superior (HOC). Eles foram adicionados ao documento oficial recentemente.
Isso pode levar a (pouco) melhores desempenhos, porque o componente do wrapper pode causar um curto-circuito na renderização um passo à frente com shouldComponentUpdate, enquanto no caso de um wrapper de tempo de execução, o prop filho provavelmente sempre será um ReactElement diferente e causará novas renderizações mesmo que seus componentes estendam o PureComponent.
Observe que o
connect
Redux costumava ser um wrapper de tempo de execução, mas foi alterado para um HOC, pois permite evitar novas renderizações inúteis se você usar apure
opção (o que é verdadeiro por padrão)Você nunca deve chamar um HOC durante a fase de renderização, pois a criação de componentes do React pode ser cara. Você deve chamar esses wrappers na inicialização.
Observe que, ao usar componentes funcionais como acima, a versão HOC não fornece nenhuma otimização útil porque os componentes funcionais sem estado não implementam
shouldComponentUpdate
Mais explicações aqui: https://stackoverflow.com/a/31564812/82609
fonte
fonte
O Facebook recomenda o uso de componentes sem estado Fonte: https://facebook.github.io/react/docs/reusable-components.html
fonte
Você pode passá-lo como um suporte normal:
foo={<ComponentOne />}
Por exemplo:
fonte
eu prefiro usar a API interna do React:
então você pode substituir a div do wrapper pelo que você quiser:
fonte
Você pode passar um componente via. os adereços e renderizá-lo com interpolação.
Você passaria uma
prop
chamadachild
, que seria um componente React.fonte
this.props.children
como sugerido em outra resposta, poderá escrever os filhos como filhos em vez de attrs.<div child={this.props.child />
.React.DOM.div
, como todos os componentes principais, usa achildren
matriz. Veja como ele é usado no seuHello
componente, ele já está usando vários filhos.Tarde do jogo, mas aqui está um poderoso padrão HOC para substituir um componente, fornecendo-o como um suporte. É simples e elegante.
Suponha que
MyComponent
renderize umA
componente fictício , mas você deseja permitir uma substituição personalizada deA
, neste exemploB
, que envolveA
um<div>...</div>
e também anexa "!" para o texto prop:fonte
Na verdade, sua pergunta é como escrever um HOC (Higher Order Component). O principal objetivo do uso do HOC é impedir a cópia e colagem. Você pode escrever seu HOC como um componente puramente funcional ou como uma classe, aqui está um exemplo:
Se você deseja gravar seu componente pai como um componente baseado em classe:
Se você deseja escrever seu pai como um componente funcional:
fonte
Aqui está um exemplo de um componente de reação da lista pai e cujos adereços contêm um elemento de reação. Nesse caso, apenas um único componente de reação do Link é passado (como visto na renderização dom).
fonte
Sim, você pode fazê-lo usando adereços. Você pode passar dados do componente como um objeto, como adereços e, dentro do componente, pode importar outro componente e ligar dinamicamente aos dados do prpps. leia mais sobre o componente reagir
fonte