
Umren
04.07.2017
20:51:10
почему он вообще в конструкторе вызывается

morda
04.07.2017
20:51:17
Эт прям хороший вопрос на собеседе) в гугле тыщи ответов)

Ywein
04.07.2017
20:51:43
https://developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

Umren
04.07.2017
20:51:55
все короче

Google

Umren
04.07.2017
20:51:58
работает
this.animate = this.animate.bind(this);
this.handleRefresh = this.handleRefresh.bind(this);
так да, видят друг друга
про bind надо почитать, не врубился в этот момент

morda
04.07.2017
20:52:24
Используй стрелочные

Umren
04.07.2017
20:52:30
да уже переделал

morda
04.07.2017
20:52:51
Поставь линтер от аирбнб он по рукам бить будет

Umren
04.07.2017
20:52:51
animate = () => {
Animated.timing(
this.state.rotateAnim, {
toValue: 1,
duration: 500,
easing: Easing.linear,
useNativeDriver: true,
}).start();
}
handleRefresh = () => {
this.animate();
}
в общем всем спасибо за помощь, так то вроде почти все понятно)
кроме некоторой js специфики

Алексей
04.07.2017
20:57:47

morda
04.07.2017
20:59:30
Уже? Читал что через пень колоду работает пока

Google

Алексей
04.07.2017
21:00:15

morda
04.07.2017
21:01:06
Ну хз))
А либа какая?

Алексей
04.07.2017
21:02:00
Animated)

morda
04.07.2017
21:02:38
Нпм и аниматед?)
Надо поглядеть

Алексей
04.07.2017
21:03:41
да вот даже пример и статья есть http://animatedjs.github.io/interactive-docs/

Umren
04.07.2017
21:07:34
после дня знакомства с реакт нейтив думаю что это все же не плохая штука, но пока рано судить)
с view layer тут точно быстрее чем в нативе работать
ну и как то все просто и логично по большей части

morda
04.07.2017
21:10:11

Umren
04.07.2017
21:10:19
flutter надо когда-нибудь еще попробовать
по крайней мере реакт нейтив это серьезный прогресс относительно кордовы и иоников всяких
там какой то полный рак по перфомансу)

Алексей
04.07.2017
21:16:15
я так и не понял как во флаттере 120 фпс выдается)
и самое главное зачем) vr что ли сразу)

Umren
04.07.2017
21:17:38
ну там нет прослоек никаких и рендер через кую то мега шуструю либу
на девайсах поддерживает вулкан и метал для рендера
короче все серьезно)
правда альфа

Google

Ywein
04.07.2017
23:28:49
120фпс как то в последнюю очередь волнует)

Play
04.07.2017
23:46:42
E/AndroidRuntime: FATAL EXCEPTION: Thread-8
Process: com.isk, PID: 21870
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RemoteViews.setTextViewText(int, java.lang.CharSequence)' on a null object reference
at com.audioStreaming.Signal.playerMetadata(Signal.java:333)
at com.spoledge.aacdecoder.IcyInputStream.parseMetadata(IcyInputStream.java:231)
at com.spoledge.aacdecoder.IcyInputStream.fetchMetadata(IcyInputStream.java:205)
at com.spoledge.aacdecoder.IcyInputStream.read(IcyInputStream.java:133)
at com.spoledge.aacdecoder.BufferReader.run(BufferReader.java:155)
at java.lang.Thread.run(Thread.java:764)
Как полечить этоу ошибку?

Алексей
05.07.2017
05:24:23
а то если честно звучит как какая то замануха
и то что нет прослоек тоже как то странно, че прям на шейдерах писать что ли надо. но емнип там дарт

Egor
05.07.2017
05:43:44
Повторюсь: есть у кого-нибудь успешный опыт с Flow + ESLint ?

lamo2k
05.07.2017
05:44:41

Egor
05.07.2017
05:46:00
1) Правила для ESLint чтобы не ругался на типы
2) Конфиг для Flow чтобы проверял только мой код, а node_modules не трогал и при этом видел RN и прочее, но на них не ругался
Как-то так
Сейчас еще буду пробовать. Мне просто надо сделать всё так, чтобы потом Jenkins мог собирать apk запуская перед этим скрипты какие-нибудь для проверки кода ESLint'ом и желательно Flow

Алексей
05.07.2017
05:49:10
я с flow давно не работал, но гугление 'react native flow eslint' выдало кучу статей

Egor
05.07.2017
05:49:19
ага конечно
именно их я вчера и лопатил одну за другой

Egor
05.07.2017
05:50:10
как включить да настроить по дефолту - это всё есть, работает

Алексей
05.07.2017
05:51:02
ну на твой вопрос есть ответ, у тех кто писал статьи есть успешный опыт ?

Egor
05.07.2017
05:51:13
=)
под конец дня нашел это https://github.com/flowtype/flow-typed
и советовалось сделать определения для non-Flow либ
и тогда он якобы перестанет ругаться...
а то сейчас ошибки вида:
node_modules/react-native/packager/src/node-haste/DependencyGraph.js:283
283: this._opts.roots
^^^^^^^^^^^^^^^^ unused function argument

Алексей
05.07.2017
05:53:18
ну надо в конфиге игнорить либы

Google

Алексей
05.07.2017
05:53:25
чтобы он их не чекал

Egor
05.07.2017
05:53:30
тогда он в моём коде их не видит =)
https://github.com/reactjs/react-redux/issues/137
вот релевантная issue
я то спросил, в надежде, что кто-то уже сделал такое. Сделаю сам - напишу.

Алексей
05.07.2017
05:55:55
ну вот смотри, я далеко ходить не стал, смотрю старый добрый f8app https://github.com/fbsamples/f8app/blob/master/.flowconfig

Egor
05.07.2017
05:56:19
он весь на Flow?

Albert
05.07.2017
05:56:31
Привет. почему при вызове метода getItem я получаю { _48: 0, _81: 0, _1: null, _36: null }, вместо нормального значения? хотя в самой функции, если выводить в консоли значение правильное.
import { AsyncStorage } from 'react-native';
export default class UserDefaults {
static async getItem(key) {
const value = await AsyncStorage.getItem(key);
return value
}
}

Алексей
05.07.2017
05:56:59

Egor
05.07.2017
05:57:11
ладно =)

Admin
ERROR: S client not available

Egor
05.07.2017
05:57:27

☃️ Dmitry
05.07.2017
05:57:31

Egor
05.07.2017
05:57:45
.then().catch()

Albert
05.07.2017
05:57:54
Ну так я делаю await

Алексей
05.07.2017
05:58:09
а то тебе же уже объясняли

Albert
05.07.2017
05:58:35
val = UserDefaults.getItem("skipWalkthrough");

Алексей
05.07.2017
05:58:53
тебе надо делать val = await UserDefaults.getItem("skipWalkthrough");

Google

Albert
05.07.2017
06:02:28
А нельзя это как-то по другому сделать?

Алексей
05.07.2017
06:03:11
UserDefaults.getItem("skipWalkthrough").then(val => console.log(val))

Albert
05.07.2017
06:04:16
static getItem(key) {
AsyncStorage.getItem(key).then((value) => {
return value
})
}
А если мы возвращаем значение?)

Алексей
05.07.2017
06:05:11
ну ?ты просто в функции вызывешь AS и результат никак не используешь
скажи лучше как ты это хочешь использовать

Albert
05.07.2017
06:06:40
Я хочу сделать некий класс, при помощи которого я буду взаимодействовать с системными настройками приложения, хочу чтобы было не напрямую через AS
Т.е надо вот так ?
static getItem(key) {
return AsyncStorage.getItem(key).then((value) => {
return value
})
}

Алексей
05.07.2017
06:07:47
как ты хочешь использовать этот класс?

Albert
05.07.2017
06:08:45
Да, уже понял.

Алексей
05.07.2017
06:09:03
мне кажется ты не понимаешь как промисы и колбэки работают в js)

Albert
05.07.2017
06:09:20
Я хочу чтобы на getitem() мне возвращался true или false, в зависимости от значения.
Да, я не до конца понимаю как они работают, в js я 2 неделю только)

Алексей
05.07.2017
06:11:04
я могу конечно объяснить, но лучше тебе просто почитать что такое асинхронное программирование

Albert
05.07.2017
06:11:40
То, что я хочу сделать вообще реально?

Алексей
05.07.2017
06:12:41
реально, вполне. я просто боюсь что ты так и будешь пытаться угадать, пока не поймешь как оно работает хотя бы приблизительно.

Albert
05.07.2017
06:13:37
Я почитаю, но можешь в кратце объяснить как это утроено?)

Egor
05.07.2017
06:14:55
ниже слоем у тебя лежит асинхронный компонент, получить синхронный доступ к значениям ты сможешь только через еще один слой в виде какого-то кэша
который тебе время от времени надо будет синхронизировать каким-то образом, я бы посоветовал всё же адаптировать свой клиентский код к этому асинхронному поведению хранилища

Алексей
05.07.2017
06:18:08
очень вероятно что я так только запутаю тебя) но если так хочешь, то js однопоточен, когда код выполняется он это делает инструкция за инструкцией, это синхронное выполнение, но в js есть еще такая штука event loop, ее смысл в том, что например когда ты обращаешься например к AS, то идет вызов к нативному коду, но js в это время продолжает работать дальше, когда нативный код отработал, ему как то надо сообщить в js результат, для этого в event loop в конец очереди ставится код колбэка который ты передал (у промисы будет код промиса) и вызывается когда js полностью отработает и не занят.


Egor
05.07.2017
06:18:33
чтобы он их не чекал
в итоге я добавил в конфиг flow по совету jukben отсюда
https://github.com/facebook/flow/issues/3875
// file .flowconfig
module.name_mapper='\(react-native\)' -> '<PROJECT_ROOT>/modulesStub.js'
// file modulesStub.js
export default {}
ну и в ignore
<PROJECT_ROOT>/node_modules/.*
может быть потом надо будет module.name_mapper для других модулей прописать, не знаю - пока у меня чистый RN темплейт...


Albert
05.07.2017
06:21:28
очень вероятно что я так только запутаю тебя) но если так хочешь, то js однопоточен, когда код выполняется он это делает инструкция за инструкцией, это синхронное выполнение, но в js есть еще такая штука event loop, ее смысл в том, что например когда ты обращаешься например к AS, то идет вызов к нативному коду, но js в это время продолжает работать дальше, когда нативный код отработал, ему как то надо сообщить в js результат, для этого в event loop в конец очереди ставится код колбэка который ты передал (у промисы будет код промиса) и вызывается когда js полностью отработает и не занят.
Ну вроде как понятно) Спасибо. Буду дальше разбираться)

Константин
05.07.2017
06:51:46