169 похожих чатов

Вопрос по архитектуре Это нормально если дочерний компонент вызывает родительские методы

с целью изменить состояние родителя
Мне кажется это ненормально.
Каждый компонент должен только свои методы вызывать и сам менять свое состояние

А для передачи данных снизу вверх, нужно делать "подслушиватель данных" между ними.

Я прав ??
Мне абсолютно не нравится стиль кода коллеги. У него дочерние компоненты вызывают родительские методы.
Имхо он нарушает принципы SOLID

Подскажите...

45 ответов

6 просмотров

Нет вы не правы, прочитай про паттерн реакта lifting state up

"подслушиватель данных" Как вы себе это представляете?

Nurbek-Nurjanov Автор вопроса
Dmitriy Shuleshov
"подслушиватель данных" Как вы себе это представл...

делаю метод у родителя listenData у потомка делаю pushData внутри pushData(){ this.props.listenData(какие то данные) }

У компонента есть внешнее апи, которое торчит наружу, его "интерфейс" - это пропсы. Компонент понятия не имеет, что передается как функция-проп и как она реализована, он просто ее вызывает в нужное время с нужными параметрами, это его работа, почему это нарушение SOLID?

Nurbek Nurjanov
делаю метод у родителя listenData у потомка делаю ...

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

Nurbek-Nurjanov Автор вопроса
Volodymyr Klimov
Вы точно так же вызываете метод родителя, который ...

Совершенно верно подметили. Но я это делаю ТОЛЬКО для ПЕРЕДАЧИ ДАННЫХ ВВЕРХ. Но никак не для "оперирования" состоянием родителя

Nurbek Nurjanov
Совершенно верно подметили. Но я это делаю ТОЛЬКО ...

А вы и не должны оперировать состоянием родителя, компонент о состоянии родителя ничего не знает, он знает только свои пропы. Это родитель передает колбек, в котором оперирует собственным состоянием

Nurbek-Nurjanov Автор вопроса
Volodymyr Klimov
А вы и не должны оперировать состоянием родителя, ...

значит это совершенно нормально если родитель дает функцию которая меняет ее состояние ребенку А ребенок получив ее как пропс вызывает у себя внутри эту функцию да ?

Nurbek Nurjanov
значит это совершенно нормально если родитель дает...

Да, ведь ребенок никак не зависит в таком случае от состояния родителя, он просто вызывает переданную функцию, причем ее декларирует сам

Nurbek Nurjanov
ясно, ок, спс

Просто может у вас был какой-то частный случай, в котором действительно написано плохо, такое тоже может быть

Nurbek-Nurjanov Автор вопроса
Volodymyr Klimov
Просто может у вас был какой-то частный случай, в ...

Впринципе я не собираюсь радикально что то менять. У меня тот же принцип. Передача функции родителя потомку как пропс. Разница лишь в том что мои функции a) называются importData и exportData b) они занимаются ТОЛЬКО ПЕРЕДАЧЕЙ ДАННЫХ, не вычислениями и тем подобным А него методы называются doSomethingOfParentLogic и естественно когда $childComponent->doSomethingOfParentLogic() у меня ощущение что child компонент как бы за родителя делает его дело

Nurbek Nurjanov
делаю метод у родителя listenData у потомка делаю ...

Ничем не отличается от способа вашего колеги

Nurbek-Nurjanov Автор вопроса
Dmitriy Shuleshov
Ничем не отличается от способа вашего колеги

немного отличие есть. в названии и тем чем они занимаются. Только передачой данных ввверх. Но не вычислениями технология да одна и та же, не спорю

Nurbek Nurjanov
немного отличие есть. в названии и тем чем они зан...

doSomethingOfParentLogic() Этот вариант лучше так как иначе мы скатимся в вуевский эммит событий

Nurbek Nurjanov
немного отличие есть. в названии и тем чем они зан...

Вам надо смотреть каждый частный случай, например, кнопка не должна принимать функцию "printMessageOnScreenOnClick", кнопка просто должна принимать функцию onClick, а что при этом делать - конечно, решает родитель.

Nurbek-Nurjanov Автор вопроса
Dmitriy Shuleshov
doSomethingOfParentLogic() Этот вариант лучше так...

вот вот. А чем плох эмиты vue вот они более строго к этому подошли имхо. более понятнее что ли. но конечно кто как привык. Но у vue эмит имхо правильней кажется

Dmitriy Shuleshov
doSomethingOfParentLogic() Этот вариант лучше так...

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

Nurbek Nurjanov
вот вот. А чем плох эмиты vue вот они более строго...

Там подход другой, в реакте нету своих событий в принципе.

Volodymyr Klimov
Вуевские события имеют право на жизнь, мне кажется...

Ну посмотри Климова про то как они начинают фигней в композишен с событиями страдать и изза чего эта абстаркция становится неявной

Dmitriy Shuleshov
Ну посмотри Климова про то как они начинают фигней...

Не, то, что во вью проблем столько же, сколько способов сделать одно и то же - это да, но сама концепция событий норм же Просто там куча способов что-то сделать, и надо знать когда какой применить, в реакте все просто - функции передаем вниз

Volodymyr Klimov
Не, то, что во вью проблем столько же, сколько спо...

Не бывает так что концепция норм, но когда мы ее вополотили в жизнь она стала костылем. Значит изначальная идея не такая уж и хорошая

Dmitriy Shuleshov
Не бывает так что концепция норм, но когда мы ее в...

Ну, блин, дом так работает) Потому и во вью так сделали, думаю

Dmitriy Shuleshov
Не бывает так что концепция норм, но когда мы ее в...

бывает. зависит от задачи / решаемой проблемы / границ применимости той или иной концепции. универсальных идеальных решений нет но это имхо уже оффтоп

Volodymyr Klimov
Ну, блин, дом так работает) Потому и во вью так сд...

в том то и дело что то как работают нативные ивенты сильно отличается от событий в вуе

Dmitriy Shuleshov
в том то и дело что то как работают нативные ивент...

У меня нет опыта на vue, знаком только концептуально, так что не имею права судить

Dmitriy Shuleshov
Не бывает так что концепция норм, но когда мы ее в...

Та что же, все, что не "как мне формочку отправить без перезагрузки страницы в реакте" - оффтоп?) Помилуйте) Пятница к тому же)

Vitaliy Ponomarev
бывает. зависит от задачи / решаемой проблемы / гр...

Универсальные решения бывают. Линукс например, так что факт про сильвер буллет слишком перегибают

Dmitriy Shuleshov
Универсальные решения бывают. Линукс например, так...

Проблема инструмента-серебрянной пули в том, что он должен либо решать максимально атомарную задачу, либо быть просто огромным, чтобы покрывать все возможные кейсы)

Nurbek-Nurjanov Автор вопроса
Dmitriy Shuleshov
Ну посмотри Климова про то как они начинают фигней...

Могли бы ссылки дать почитать. Что плохого в строгих композициях. Строгость только помогает коду больше читабельности.

Volodymyr Klimov
Проблема инструмента-серебрянной пули в том, что о...

Я еще раз приведу пример. Линукс - сильвер булет ОС. Задача фреймворка\либы для фронта намного скромнее, так что я лично за то что пока мы не достигли хотя бы первой ступени развития, где бы большая часть подкапотной работы была скрыта за абстракциями веб фреймворка.

Nurbek-Nurjanov Автор вопроса
Volodymyr Klimov
Что такое "строгие композиции"?

Я пришел во фронт из бакенда. и конечно притащил сюда свои солиды из бакенда. но по моему принципы должны быть одни и те же. Каждый компонент должен делать только свои вещи. Если между ними есть обмен данными, то между ними мост, функции должны называться импорт и экспорт и там внутри этих функция строго передачи данных и ничего больше никаких других операций все максимально строго.

アレクサンダー・バキマトフ
в чужой храм со своим уставом?)

да на самом деле устав-то один, просто чутка детали реализации отличаются.

Nurbek Nurjanov
Я пришел во фронт из бакенда. и конечно притащил с...

Вы говорите правильно про принципы, но то, что вы пишете про реализацию, никак с этими принципами не связанно. solid везде работает, но называться вещи могут по-разному, и даже быть реализованы)

Vitaliy Ponomarev
да на самом деле устав-то один, просто чутка детал...

та понятное дело) мне просто всегда нравится когда чуваки приходят из других областей и пытаются сову на глобус натянуть. типа все ваши практики говно - вот как должно быть. ))

Volodymyr Klimov
Вы говорите правильно про принципы, но то, что вы ...

Просто "свои вещи" в разных фреймворках для компонентов тоже слегка отличаются

Nurbek Nurjanov
Я пришел во фронт из бакенда. и конечно притащил с...

Если вы пришли из бекенда - вам уже концепция хранимого компонентом состояния должна глаза мозолить😁

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Карта сайта