|
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
|
||||||||||||||||||||||||||||||||||||
Callback с аргументами12.08.2021, 17:08. Показов 3820. Ответов 5
Метки нет (Все метки)
В react приложении есть метод
render()
createCustomSelect(...) как-то так например
Добавлено через 35 минут Та же самая ошибка и с таким вызовом
0
|
||||||||||||||||||||||||||||||||||||
| 12.08.2021, 17:08 | |
|
Ответы с готовыми решениями:
5
Использование метода из dll (C++) с callback аргументами в C# программе?
Работа с аргументами |
|
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
|
||||||||||||||||
| 13.08.2021, 05:50 | ||||||||||||||||
Сообщение было отмечено Timurs как решение
Решение
Timurs, у вас классическая ошибка с this.
У функции selectMsu контекст - ваш класс компонента, а у возвращаемой функции this будет undefined, так как она не является методом, т.е. не имеет своего "родительского" объекта - не имеет this. (В нестрогом режиме, кстати, "родительский" объект был бы - globalThis - window для браузера). Решений в вашем случае несколько: 1. Непонятно зачем вы используете тут фабрику функций и "колбэки", это выглядит напрасным усложнением, да и, вообще, фабрика функций в таком виде не является распространённой практикой в React. Так что первое решение - упростить код. 2. Чтобы получить доступ к "родительскому" this можно воспользоваться стрелочными функциями, которые никогда не имеют собственного this:
Ну, и почитать: https://learn.javascript.ru/ob... -v-metodah https://learn.javascript.ru/bind Не по теме: А почему бы вам не использовать функциональные компоненты? По функциональности они сейчас практически равны классам, а новичкам, ИМХО, освоить их легче: там нет this? (Хотя хуки...)
0
|
||||||||||||||||
|
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
|
|||||||||||
| 13.08.2021, 10:40 [ТС] | |||||||||||
|
Iverycool, спасибо, через анонимные функции не получилось, а через стрелочные вчера всё-таки сделал, спасибо, интересно!
Вчера пришла мысль, что коллбэк позволит мне повторно использовать код, не понимал вначале как именно, тем более и написать не получалось, но общая идея такая - у меня имеется множество блоков, у всех этих блоков из общей разметки лишь враппер, тайтл и контент, но контент везде разный, в одном блоке селекты в две колонки, в другом вначале просто селект по середине, а под ним две колонки или три, а под ними ещё там как-то, в третьем вообще другие компоненты либо разные компоненты, причем зачастую в блоке компонентов много, то есть нужен цикл, пришла идея вынести общую часть в метод, на разметку контента конкретного блока писать конкретный для этого блока метод (получается да, сделать фабрику функций для фабрики блоков) и прокидывать коллбэком в общий метод. Получилось вроде бы ниче так
В дальнейшем планирую сделать компонент Tab и вынести внутрянку в него.На самом деле я перепилил экзэмпл https://github.com/aholachek/react-flip-toolkit stagger effects с хуков на классы и использовал его как остов для своего приложения, мне с классами как-то психологически проще) Но не только поэтому, сервер на котором будет размещаться приложение не шибко новый и если честно я не знаю какая версия ноды и реакта там вообще работать будет... Добавлено через 18 минут selectMsu забыл переименовать на createCustomSelect, то есть этот метод не привязан к блоку.
0
|
|||||||||||
|
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
|
|||||||||||||
| 13.08.2021, 13:05 | |||||||||||||
Сообщение было отмечено Timurs как решение
РешениеА вам самим не кажется, что ваш код слишком нагромождён? У вас всего чуть более 50 строчек в общем, но они ни капли не интуитивно понятны) В вашем случае надо применять композицию компонентов (код без jsx даже получится чем-то похожим ):
">=0.10.0". Так что не отговорка ![]() Для компонентов с состоянием - согласен применять классы ещё допустимо, но для stateless-компонентов (часто UI) - функции однозначно проще. Если вы поймёте хуки, то вряд ли останетесь на классах) И почитайте официальные доки, они и на русском есть: https://ru.reactjs.org/docs/hooks-intro.html https://ru.reactjs.org/docs/co... tance.html https://ru.reactjs.org/docs/context.html https://ru.reactjs.org/docs/hi... nents.html https://ru.reactjs.org/docs/render-props.html https://ru.reactjs.org/docs/thinking-in-react.html
1
|
|||||||||||||
|
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
|
|||||||||||
| 13.08.2021, 15:04 [ТС] | |||||||||||
|
Iverycool, красиво у Вас получилось, спасибо, надо переделать также, но я столкнулся с проблемой, кажется, Вы упомянули о ней уже
Тут явно указаны опции this.props.modes, по сути это this.props.modesMSU, ну и эти пропсы явные this.props.msu.get(msuKeys[i]), this.props.onSelectMSU, msuTitles[i], то есть они относятся к блоку MSU.У меня имеется ещё блок BSSD, у него уже this.props.modesBSSD, this.props.bssd.get(bssdKeys[i]), this.props.onSelectBSSD, bssdTitles[i]. Правда с фигурными скобками не пробовал, получается что аргумент объект, может и прокатит
Iverycool, спасибо, не знал, что так можно, всё работает!
0
|
|||||||||||
|
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
|
|||||||||||||||||||||
| 19.08.2021, 13:32 [ТС] | |||||||||||||||||||||
|
Iverycool, а не подскажите как такие вещи в отдельный класс выносить
Разобрался, всё проще даже оказалось
0
|
|||||||||||||||||||||
| 19.08.2021, 13:32 | |
|
Помогаю со студенческими работами здесь
6
Функция с аргументами макросы с аргументами
Работа с аргументами Работа с аргументами ф-й в С++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
в-строка - входное арифметическое выражение в инфиксной(обычной). . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|