Путаница по поводу определенной практики в функциональной реакции - PullRequest
1 голос
/ 17 февраля 2020

У меня в приложении есть компонент 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>}
]

У моего вопроса есть несколько связанных подвопросов.

  1. Это плохая практика? Я использую аналогичный подход для рендеринга полей формы <Form fields={[...]}/>
  2. Разве это не против чисто функционального программирования?
  3. Не будут ли случаи RecordsView не подвергаться сборке мусора при повторном рендеринге компонента из-за глобальной ссылки на columns, которая находится вне функции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...