Задать вопрос

Что из этого является настоящим контейнером в реакт?

Встречаю много формулировок разных видов компонентов и стал немного путаться.

Является ли компонент, который отрисовывает другой компонент и передает в него данные, контейнером?
например
const Nav = ({data}) => <a>{data}</a>;

class NavContainer extends Component = {
  render () {
    return(
    <Nav data="Hi" />
    )
  }
};


Или контейнером называется компонент (хок), который оборачивает принимаемый компонент и передает в оборачиваемый компонент данные, ничего не отрисовывая?

const Nav = ({data}) => <a>{data}</a>;

const navContainer = (Component) => {
  return ({text, ...props}) => {
    return(
    <Component data={text} {...props} />
    )
  }
};

const withTextNav = navContainer(Nav);
<withTextNav text="hi" />
  • Вопрос задан
  • 179 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
Встречаю много формулировок разных видов компонентов и стал немного путаться.


И будете встречать еще больше. Каждый придумывает свое, "немного более правильное" определение.
Кому-то контейнер это одно, а кому-то совсем другое, а третий скажет что настоящих контейнеров там вообще нет, потому что настоящие были только в 80-х а потом стали говно какое-то делать.
главное понимать что конкретный человек который вам это говорит под этим словом понимает. Называйте как хотите - если работаете в команде - то договоритесь что какой термин значит. Если самостоятельно - то все равно.

Единственное на что стоит ориентироваться - это терминология принятая в официальной документации. Там же и подробно разжевано что все это значит. Контейнеров как отдельного термина там нет, слово используется утилитарно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tsepen
@tsepen
Frontend developer
Я называю контейнерами такие компоненты которые не содержат jsx разметки, они работают с данными и передают их в другие компоненты (тупые), которые в свою очередь ничего с данными не делают, а подставляют их в jsx и возвращают разметку
Ответ написан
@Dasslier
FrontEnd Developer
Компонент-контейнер содержит логику, которая одинаковая/практически одинаковая для нескольких компонентов. В итоге, чтобы не дублировать один и тот же код в разных компонентах и не менять его то тут, то там при каких-либо изменениях их держат в одном контейнере.

Выглядит это примерно так:

const Container = (View) => {
 return class extends Component {
  state = { num: 1 };
  render() {
   return <View {..this.state} {...this.props} />
  }
 }
}


В компоненте пишите любую логику с изменением стейта, методами и т.д., а потом передаете это в оборачиваемый компонет, и в нем уже из пропсов достаете, что нужно

HOC это немного другое, например connect у react-redux это HOC, разницу между connect и выносом логики для отрисовки конкретных компонентов, думаю поймете сами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽