У меня в приложении есть компонент React RecordsView
, подобный этому.
const RecordsView = ({data}) => {
return (
<SearchBar/>
<Table
data={data},
columns=[
{id : 'name', header : 'Name', renderAs : (v) => <b>{v}</b>}
]
/>
)
}
Как вы можете видеть, компоненты Table
принимают пропеллу columns
, которая сообщает, какие атрибуты отображать из массив data
и способ их рендеринга с помощью функции renderAs
.
Для описанной выше реализации можно сказать, что функция renderAs
будет воссоздана в памяти для каждой строки Table
, более того будет воссоздан для каждого рендера родительского компонента.
Я думал о перемещении значения columns
prop за пределы компонента, как это, а затем просто передал его компоненту Table
.
const columns = [
{
id : 'name',
header : 'Name',
renderAs : (v) => <b>{v}</b>}
]
У моего вопроса есть несколько связанных подвопросов.
- Это плохая практика? Я использую аналогичный подход для рендеринга полей формы
<Form fields={[...]}/>
- Разве это не против чисто функционального программирования?
- Не будут ли случаи
RecordsView
не подвергаться сборке мусора при повторном рендеринге компонента из-за глобальной ссылки на columns
, которая находится вне функции.