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

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

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

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

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

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

45 ответов

10 просмотров

Нет вы не правы, прочитай про паттерн реакта 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
Я пришел во фронт из бакенда. и конечно притащил с...

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта