Alexander
Кто спец в jest? Можете помочь замокать класс?
Alexander
]]]
Alexander
const requests = new Requests({ async: true, requestAttemptCount: 3, refreshAttemptCount: 3, }); requests.makeRequest(async (headers) => { try { const response = await client({ ...config, headers: { access_token: headers.token } }); observer.next(response.data); observer.complete(); } catch (e) { if (Axios.isCancel(e)) { observer.error('Cancelled by user'); } else { observer.error(e); } } });
Alexander
Нужно замокать класс Requests
Aleksei
Ребят, кто знает как работает focus() и blur(), я чет не могу в исходниках найти. Проблема в чем, у меня есть нативный компонент, который сабкласит RCTBaseTextInputView (то бишь это TextInput) и есть лэйбл через обычный Text, я пытаюсь через реф вызвать focus(), и это работает в первый раз отлично, потом я из нативки кидаю эвент на блюр через [_eventDispatcher sendTextEventWithType:RCTTextEventTypeBlur reactTag:self.reactTag text:self.backedTextInputView.text key:nil eventCount:_nativeEventCount]; но при этом повторное нажатие на лейбл ничего не дает. Я конечно сделал хак через onBlur={() => this.pickerRef != null && this.pickerRef.blur()}, но выглядит это конечно так себе. Мои поиски реализации закончились здесь https://github.com/facebook/react-native/blob/5491c3f942430982ce9cb6140ed1733879ed3d1d/Libraries/Renderer/shims/NativeMethodsMixin.js#L19
Aleksei
Пока писал решил проверить одну мыслю, и нашел такое https://github.com/facebook/react-native/blob/5491c3f942430982ce9cb6140ed1733879ed3d1d/Libraries/Components/TextInput/TextInput.js#L1196 . Так что мой хак не такой уж то и хак 🙂
Gena
Пока писал решил проверить одну мыслю, и нашел такое https://github.com/facebook/react-native/blob/5491c3f942430982ce9cb6140ed1733879ed3d1d/Libraries/Components/TextInput/TextInput.js#L1196 . Так что мой хак не такой уж то и хак 🙂
У них плохо всё с фокусом. Он трекается в js и может рассинхронизироваться/сломаться (при перезагрузке бриджа или использовании нескольких RootView) Основной код лежит здесь: https://github.com/facebook/react-native/blob/0.58-stable/Libraries/Components/TextInput/TextInputState.js
Gena
по коду вот вообще не понятно зачем это надо)
А оно там хорошо спрятано. Им пользуются: Рендерер, ScrollResponder и KeyboardAvoidingView
Gena
Я когда сюда скидывал реализацию KeyboardAvoidingView тоже туда в приватное апи залез, т.к. иначе невозможно получить id текущего элемента. И да, там захардкожен штатный TextInput и больше с ним вроде ничего не работает (это не точно, мог забыть уже).
Gena
не, сорри, не в KeyboardAvoidingView... где-то в другом месте... чуть позже напишу
Gena
Там этим пользуется функционал в Libraries/Utilities/dismissKeyboard.js
Andrii
какой самый быстрый навигатор по страницам?
Aynur
rnn по идее
Andrii
спасибо больше
invariance
Сделал в общем свою радио кнопку. Выглядит оно так: constructor() { ... this.radioBtn = React.createRef(); } _getRadioRound = () => { return <View ref={this.radioBtn}></View> } render() { return ( <View> ... {this._getRadioRound()} </View> ); } Но какого то хрена у меня все еще undefined object this.radioBtn при попытке получить этот реф. Что я делаю не так то?
invariance
Типо это не считается за то, что я объявил реф до рендера?
invariance
Не, нифига, все та же ошибка
Cenator 🐈
тогда не выноси в метод _getRadioRound
invariance
Та же ошибка =(
чей ты
Та же ошибка =(
this.radioBtn.current
invariance
Не работает. Именно radioBtn не находит
чей ты
контекст может потерян
invariance
кстати, а как console.log читать на андроиде? Никак?
Ianis
Не, нифига, все та же ошибка
А где пытаетесь получить?
Ianis
кстати, а как console.log читать на андроиде? Никак?
Имеете ввиду с реального устройства?
invariance
ну эмулятор, по сути да
Ianis
ну эмулятор, по сути да
А в чем проблема? Открываете дебагер, включаете режим отладчика в эмуляторе
Cenator 🐈
ну эмулятор, по сути да
debug js remotely нажми в меню
invariance
В общем концепт примерно такой: refContainer = React.createRef(); _onPress() { alert(this.refContainer.current.toString()); } render() { return ( <Button onPress={this._onPress()}> <View ref={this.refContainer}/> </Button> ); } Возможно проблема в том, что я пытаюсь вызвать реф "снаружи" компонента, где он устанавливается?
invariance
вроде что то получается
invariance
Всем спасибо за помощь, буду дальше пытаться)
invariance
это да, просто для удобства пишу)
invariance
свои тараканы короче
Eugene
У реакт-нативщиков прям какая-то тенденция писать с '_'
invariance
У реакт-нативщиков прям какая-то тенденция писать с '_'
ну я с флаттера перескочил, так что у меня тенденция не от реакт разработчиков :D
Cenator 🐈
А почему без скобок? Вот непонятен вообще этот момент в JS
потому что надо передавать функцию а не результат ее вызова
invariance
а от дарта
Ianis
А почему без скобок? Вот непонятен вообще этот момент в JS
У вас общее непонимание JS, прочитайте основы
invariance
это правда, к сожалению
Cenator 🐈
Лол
по делу есть что?
Nikita
Из доков угадай чего
Cenator 🐈
щас бы просто принимать на веру без какого либо логического объяснения
Nikita
А мы религией занимаемся?
Cenator 🐈
это не я привел пример не самого удачного нейминга лишь потому что он из доки
Александр
дай угадаю, react native?
Maxim
в Interactable можно как-то нормально слушать drag, а не только старт или стоп?
Maxim
например как в ScrollView onScroll
Никита
в Interactable можно как-то нормально слушать drag, а не только старт или стоп?
да, там animated переменная привязывается. Только так вроде
Maxim
да, там animated переменная привязывается. Только так вроде
ну это нужно для анимации, а мне нужно при определенной позиции во время драга менять переменную
Никита
я в итоге пришел к тому что interactable вещь конечно крутая, но в итоге проще без нее. Много ограничений, все через костыли. Работает в итоге только для задач из примеров красиво
Никита
ну не только конечно, но все же далеко не все на ней делается
Maxim
ну не сильно сложные вещи делаются очень просто, но такие ограничения заставляют грустить
Maxim
а что используешь вместо Interactable?
Stanislav
Ребят, кто-то смог как-то решить проблему с перформансом FLatList и SectionList, когда мы имеем лист больше 1000 сложных айтемов ? Пробовал уже использовать либы типа RecyclerView и react-native-tableview, но они лист все-равно не был такой же плавный как на нативном приложении. Также использовал различный props для листов, которые должны тоже помочь с производительностью, но опять же ничего(example: updateCellsBatchingPeriod, initialNumToRender etc.) Кто как решал эту проблему ?
Dmitry
ну не сильно сложные вещи делаются очень просто, но такие ограничения заставляют грустить
ну смотря какие, хотелось бы кейсы увидеть. Делал на основе interaсtable свайплист получился неотличимым от нативного
Никита
если к ней не привязываться то оказывается многие вещи проще делать на panResponder или gesture handler насчет проблемы - есть вроде что-то типо addListener для animated, но я не использовал. Костыль но я других вариантов не видел
Никита
но тащить interactable из-за свайплиста достаточно сильно. Его любыми средствами легко написать, плюс есть какая-то незадокументированная реализация прямо в рн (вероятно даже нативная), плюс куча простых, куда более легковесных либ
Maxim
Stas
react-native-git-upgrade добавляет дупликаты файлов и библиотек с разными id-и в проектые ios файлы.
Stas
Stas
это не ломает сборку, но некоторых уже по 3-4. это кае-нибудь лечится?
Artem
Как в RN правильно править css на лету? Например с Реактом чистым в браузере все понятно - открыл консоль разработчика и играешься со стилями как хочешь, а здесь как быть, как делать пиксель перфект?
Никита
в похожей задаче не нравится требование snapPoint. Хочется иметь возможность остановить в любой позиции в этой задаче нужно чтобы контент внутри скролился, но при достижении границы чтобы начиналось движение interactable. Я не разобрался как это сделать более менее нормально, пока задача не решена
Artem
ну т е react-native-debugger это самый лучший вариант получается? ( там ведь только просмотр
Наталья
можно заходить в стили и менять стили сразу
Наталья