Будучи новичком в мире React, я хочу глубоко понять, что происходит, когда я использую {this.props.children}, и в каких ситуациях можно использовать то же самое. Насколько это актуально в приведенном ниже фрагменте кода?
render() {
if (this.props.appLoaded) {
return (
<div>
<Header
appName = {this.props.appName}
currentUser = {this.props.currentUser}
/>
{this.props.children}
</div>
);
}
}
В данной ссылке не было ясно, что происходит, когда я использую {this.props.children} внутри компонента.
Лучший ресурс mxstbr.blog/2017/02/react-children-deepdive



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что вы видите это в методе render компонента React, например (изменить: ваш отредактированный вопрос действительно показывает это):
class Example extends React.Component {
render() {
return <div>
<div>Children ({this.props.children.length}):</div>
{this.props.children}
</div>;
}
}
class Widget extends React.Component {
render() {
return <div>
<div>First <code>Example</code>:</div>
<Example>
<div>1</div>
<div>2</div>
<div>3</div>
</Example>
<div>Second <code>Example</code> with different children:</div>
<Example>
<div>A</div>
<div>B</div>
</Example>
</div>;
}
}
ReactDOM.render(
<Widget/>,
document.getElementById("root")
);<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>children - это специальное свойство компонентов React, которое содержит любые дочерние элементы, определенные внутри компонента, например divs внутри Example выше. {this.props.children} включает эти дочерние элементы в результат рендеринга.
...what are the situations to use the same
Вы бы сделали это, когда захотите включить дочерние элементы в визуализированный вывод напрямую, без изменений; и нет, если вы этого не сделали.
Если повторное использование не касается дочерних узлов, есть ли разница в производительности при вызове {props.children} из дочернего компонента, чем при его использовании внутри дочернего компонента?
@ Нимми: Извините, я не понимаю, что вы имеете в виду под * "... чем использовать его внутри дочернего компонента".
Я имел в виду «вызов {this.props.children} в дочернем компоненте, а не запись узлов непосредственно в соответствующий дочерний компонент».
@ Нимми: Прости, я все еще не понимаю. Можете ли вы сказать, что бы вы сделали по-другому с помощью приведенного выше кода?
@ Нимми, я полагаю, вы думаете, почему я должен поставить {this.props.children} вместо этого, я могу это записать, я это знаю. В таком случае сделайте это и получите небольшое преимущество в производительности. Но ваш компонент будет статическим, его нельзя будет повторно использовать с набором разных дочерних элементов в другом месте вашей кодовой базы.
@ssk: А! Хороший. Нимми - Да, вы можете записать детей прямо в ваш render, но они будут одними и теми же детьми во всех случаях. Принимая дочерние элементы (где это необходимо), каждый экземпляр вашего компонента может иметь разное содержимое. Я обновил пример в ответе.
Где мы должны использовать {this.props.children} и где свойства рендеринга react? В чем разница между ними?
What even is ‘children’?
The React docs say that you can use
props.childrenon components that represent ‘generic boxes’ and that don’t know their children ahead of time. For me, that didn’t really clear things up. I’m sure for some, that definition makes perfect sense but it didn’t for me.My simple explanation of what
this.props.childrendoes is that it is used to display whatever you include between the opening and closing tags when invoking a component.A simple example:
Here’s an example of a stateless function that is used to create a component. Again, since this is a function, there is no
thiskeyword so just useprops.children
const Picture = (props) => {
return (
<div>
<img src = {props.src}/>
{props.children}
</div>
)
}
This component contains an
<img>that is receiving somepropsand then it is displaying{props.children}.Whenever this component is invoked
{props.children}will also be displayed and this is just a reference to what is between the opening and closing tags of the component.
//App.js
render () {
return (
<div className='container'>
<Picture key = {picture.id} src = {picture.src}>
//what is placed here is passed as props.children
</Picture>
</div>
)
}
Instead of invoking the component with a self-closing tag
<Picture />if you invoke it will full opening and closing tags<Picture> </Picture>you can then place more code between it.This de-couples the
<Picture>component from its content and makes it more reusable.
Ссылка: Краткое введение в props.children React
Если повторное использование не касается дочерних узлов, есть ли разница в производительности при вызове {props.children} из дочернего компонента, чем при его использовании внутри дочернего компонента?
@Nimmy при использовании {props.children} у нас нет проблем с производительностью, просто нужно передать компонент в качестве реквизита. и когда мы можем использовать дочерние элементы внутри дочернего компонента, не нужно использовать {props.children}
Действительно хорошее чтение: daveceddia.com/pluggable-slots-in-react-components/…
Пример взят из codeburst.io/…
@AlpitAnand Вы можете увидеть ссылку в конце ответа: |
ладно, жаль, читал рядом, но не дошел до конца: p
@AlpitAnand Обычно ссылка на основной ответ или статью является концом ответа. Это обычная практика, когда вам нужно просто ответить, чтобы решить вашу проблему. Спасибо за внимание ;)
Большое спасибо. Очень красиво объяснено.
Мне нравится, как вы использовали кавычки в своем тексте.
props.children представляет содержимое между открывающим и закрывающим тегами при вызове / рендеринге компонента:
const Foo = props => (
<div>
<p>I'm {Foo.name}</p>
<p>abc is: {props.abc}</p>
<p>I have {props.children.length} children.</p>
<p>They are: {props.children}.</p>
<p>{Array.isArray(props.children) ? 'My kids are an array.' : ''}</p>
</div>
);
const Baz = () => <span>{Baz.name} and</span>;
const Bar = () => <span> {Bar.name}</span>;
вызвать / вызвать / отобразить Foo:
<Foo abc = {123}>
<Baz />
<Bar />
</Foo>
Спасибо. Это было намного проще, лаконичнее и полезная демонстрация.
Возможный дубликат ReactJS: Зачем использовать this.props.children?