Dmytro
Всем привет, подскажите пожалуйста норм стартовый шаблон без expo. Чистый react-native.
不退転」
react-native init
#sasha
Привет всем, как лучше организовать многопоточность в реакт нейтив?
#sasha
а то некоторая работа с сетью как я понимаю, блокирует интерфейс
#sasha
код в студию
много, целую аппу тогда кидать надо
#sasha
в общем, работаю с UDP
#sasha
при открытии аппы начинаю слушать один порт, и иногда по акшену отправляю пакеты на другой порт
Gena
В js - никак. Надеюсь вы знаете, что JS по самой своей сути однопоточный?
#sasha
вот отправка начинает и глючить, именно интерфейс и задержка в пару секунд
#sasha
В js - никак. Надеюсь вы знаете, что JS по самой своей сути однопоточный?
конечно знаю что асинхронный, но тут я говорю, аппа постоянно слушает и иногда отправляет, всё работает, только интерфейс подвисает при отправке
Gena
На самом деле скорей всего всё ещё проще. Как вы шлете udp пакет?
#sasha
let message = new Buffer([0xFF, 0x04, 0x00, 0x80, 0x00, 0xFF]); console.log("Search device message: ", message); return getState().socket.send(message, 0, message.length, PORT, HOST, err => { if (err) throw err; return dispatch({ type: SEARCH_DEVICES }); });
#sasha
пример с акшена редакса
#sasha
сокет просто открываю let socket = dgram.createSocket("udp4");
Gena
https://github.com/tradle/react-native-udp/issues/47
Gena
android ведь?
#sasha
окей, спасибо
#sasha
хренова
Gena
там есть PR, который это лечит
Gena
так что можно форкануть, накатить PR и ставить прям с github...
#sasha
с 2017 не замерджен
#sasha
но спасибо большое
#sasha
буду думать
Gena
А вы diff, гляньте... единственное, что может пойти не так, надо посмотреть в каких версиях android это API присутствует
Dmitry
@quarrant https://github.com/invertase/react-native-firebase/issues/1031
Походу все таки в зависимостях дело
Gena
Ага, похоже на то
Dmitry
Отвратительный дебаг на андройде
Dmitry
ничего найти невозможно
Dmitry
типа в ишью написано ну вы просмотрите все зависимости всех пакетов и где используются gsm отключите их
Gena
Вообще, я когда начал программировать на js, понял, насколько счастливыми людьми должны быть js-программисты. У них в 99% случаев этой проблемы нет. Потому что js - единственный из широко используемых языков, где модули/классы не глобальны. Там можно хоть 10 версий одной и той же библиотеки иметь в проекте и оно будет работать. Нигде такого больше нет, в C/C++/ObjC/Java в программе может быть только один статический символ - пакет, класс, глобальная переменная... Вслед за ними тот же принцип в скриптовых языках - perl/python/ruby... тоже самое...
Gena
Отсюда и проблемы в пакетных менеджерах такие... две либы хотят третью разных версий, а разрешить это можно только в одну из них...
Gena
Если ближе к делу, я где-то видел сниппет на gradle (возможно, даже здесь публиковали), который для конкретной либы форсит нужную версию по всем зависимостям.
Vitaliy
типа в ишью написано ну вы просмотрите все зависимости всех пакетов и где используются gsm отключите их
похожая ситуация была, можно dependencies tree погрепать как вариант https://stackoverflow.com/questions/39008887/how-do-i-show-dependencies-tree-in-android-studio
Dmitry
да
Dmitry
но там рехнешься
Vitaliy
а потом что-то такое сделать в app/build.gradle : implementation (project(':react-native-device-info')) { exclude group: "com.google.android.gms" }
Vitaliy
Если ближе к делу, я где-то видел сниппет на gradle (возможно, даже здесь публиковали), который для конкретной либы форсит нужную версию по всем зависимостям.
для модулей самого firebase такое решение уже точно не подойдет, антипаттерн, после версии 15+ они версии пакетов разделили и обновляют по отдельности, насчет gms по всем подмодулям не уверен, давно не смотрел changelog
Vitaliy
@quarrant @gblack9 вообще это вот так выглядело (в android/build.gradle, внутри allprojects, под блоком repositories) subprojects { project.configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'com.google.android.gms') details.useVersion('12.0.1') if (details.requested.group == 'com.google.firebase') details.useVersion('12.0.1') } } }
Eldar
Ребят. У меня есть компонент который я импорчу в апп жс. В компоненте есть такой кондишн связанный со стейтом. <View style={[ styles.squareButtonNumber, this.state.defenseDiceStatus == 1 ? styles.squareButtonNumberSelected : null ]} >
Eldar
как правильно к стейту обратиться?
Dmitry
нельзя null же в стили
Vitaliy
@quarrant можно ваш конфиг app/build.gradle посмотреть? может подскажу чего.
Eldar
а со стейтом что делать?
Eldar
я вот что думаю, может вынести кондишн в функцию?
不退転」
а со стейтом что делать?
ты и так правильно обратился к нему
不退転」
проверь сначала не опечатался ли ты, и есть ли у тебя вообще такое значение в стейте
Eldar
да, я сначала все накатал в апп жс, теперь разношу по компонентам
Никита
вероятно биндить контекст надо (стрелочной делать или bind)
不退転」
да, я сначала все накатал в апп жс, теперь разношу по компонентам
в рендере пропиши console.log(this.state) и проверь есть ли у тебя значение
Никита
undefined будет, в ошибке же написано
Eldar
потому что он его не видит в компоненте насколько я понимаю
不退転」
если у тебя стейт инициализирован там же где и компонент то будет виден
Dmitry
потому что он его не видит в компоненте насколько я понимаю
ты весь код компонента пришли, чего гадать
Eldar
不退転」
ну и сразу все понятно
不退転」
нету у тебя стейта в компоненте
不退転」
у тебя функциональный компонент
不退転」
передавай в стейт в компонент через пропсы
不退転」
с родителя
Eldar
точняк
Eldar
сейчас попробую, спасибо
不退転」
и не возвращай null в тернарниках в стилях
Никита
Никита
это тоже великолепно
Eldar
а как правильно?
不退転」
а как правильно?
onPress={props.change}
不退転」
а как правильно?
либо onPress={() => props.change()} если надо аргументы закинуть
Dmitry
5.2.2