Aleksei
а то тебе же уже объясняли
Albert
val = UserDefaults.getItem("skipWalkthrough");
Aleksei
тебе надо делать val = await UserDefaults.getItem("skipWalkthrough");
Albert
А нельзя это как-то по другому сделать?
Aleksei
UserDefaults.getItem("skipWalkthrough").then(val => console.log(val))
Albert
static getItem(key) {
AsyncStorage.getItem(key).then((value) => {
return value
})
}
А если мы возвращаем значение?)
Aleksei
ну 👆ты просто в функции вызывешь AS и результат никак не используешь
Aleksei
скажи лучше как ты это хочешь использовать
Albert
Я хочу сделать некий класс, при помощи которого я буду взаимодействовать с системными настройками приложения, хочу чтобы было не напрямую через AS
Albert
Т.е надо вот так ?
static getItem(key) {
return AsyncStorage.getItem(key).then((value) => {
return value
})
}
Aleksei
как ты хочешь использовать этот класс?
Albert
Да, уже понял.
Aleksei
мне кажется ты не понимаешь как промисы и колбэки работают в js)
Albert
Я хочу чтобы на getitem() мне возвращался true или false, в зависимости от значения.
Albert
Да, я не до конца понимаю как они работают, в js я 2 неделю только)
Aleksei
я могу конечно объяснить, но лучше тебе просто почитать что такое асинхронное программирование
Albert
То, что я хочу сделать вообще реально?
Aleksei
реально, вполне. я просто боюсь что ты так и будешь пытаться угадать, пока не поймешь как оно работает хотя бы приблизительно.
Albert
Я почитаю, но можешь в кратце объяснить как это утроено?)
Egor
ниже слоем у тебя лежит асинхронный компонент, получить синхронный доступ к значениям ты сможешь только через еще один слой в виде какого-то кэша
Egor
который тебе время от времени надо будет синхронизировать каким-то образом, я бы посоветовал всё же адаптировать свой клиентский код к этому асинхронному поведению хранилища
Aleksei
очень вероятно что я так только запутаю тебя) но если так хочешь, то js однопоточен, когда код выполняется он это делает инструкция за инструкцией, это синхронное выполнение, но в js есть еще такая штука event loop, ее смысл в том, что например когда ты обращаешься например к AS, то идет вызов к нативному коду, но js в это время продолжает работать дальше, когда нативный код отработал, ему как то надо сообщить в js результат, для этого в event loop в конец очереди ставится код колбэка который ты передал (у промисы будет код промиса) и вызывается когда js полностью отработает и не занят.
Egor
чтобы он их не чекал
в итоге я добавил в конфиг 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
очень вероятно что я так только запутаю тебя) но если так хочешь, то js однопоточен, когда код выполняется он это делает инструкция за инструкцией, это синхронное выполнение, но в js есть еще такая штука event loop, ее смысл в том, что например когда ты обращаешься например к AS, то идет вызов к нативному коду, но js в это время продолжает работать дальше, когда нативный код отработал, ему как то надо сообщить в js результат, для этого в event loop в конец очереди ставится код колбэка который ты передал (у промисы будет код промиса) и вызывается когда js полностью отработает и не занят.
Ну вроде как понятно) Спасибо. Буду дальше разбираться)
Egor
Tino
Для haul, например, он не смог ничего найти и предложил создать пустой libdef — тоже, в целом, сработало
Anonymous
я правильно понял, что виджеты на андроиде с реакт нейтивом нормально сделать нельзя?
Brown
Warning: Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`.
https://gist.github.com/Cooli88/f68eb146113c166732371963706e58d2
Brown
Что он от меня хочет, чтобы я избавился от конструктора?
Albert
Albert
Не подскажете почему так? Я перекидываю авторизованного пользователя на другой экран, и тут такое
if(this.state.authUser !== undefined) {
return(
<MainMenuScreen/>
);
} else {
return (
<View style={{flex: 1}}>
<View style={{marginTop: 5.....
}
Aleksei
Dima
кто напишет бота который как только видит jsx или pastbin сразу пишет такое сообщение? :)
Aleksei
Anonymous
как пробросить ref с топ лвл компонента во вложенный? через аттрибут передаю внутри this.props.something нуль, как то хитро биндить это надо?
Anonymous
а зачем это?
Anonymous
есть кнопка во вложенном компоненте тулбара которая открывает навбар
Aleksei
вангую что соседнему
Aleksei
просто в родительском управляй
Anonymous
в родительском кнопки нет
Anonymous
имхо, лучше через пропс из родителя прокидывать метод, который будет хандлером нажатия кнопки
Anonymous
тоже над этим думал
Anonymous
попробую
Anonymous
да, работает норм
Anonymous
просто функцию с замыканием передаю и все, а то че то вначале подумал по сложному пути идти)
Anonymous
так с нативными виджетами под андроид я так понял все грустно в реакт нейтив?
Kirill
можешь плюсануть
Kirill
https://react-native.canny.io/feature-requests/p/android-home-screen-widget
Anonymous
ага, проголосовал за свг еще
Kirill
с свг более менее через либы работает
Aleksei
для ios кстати видел статью как сделать виджет)
Anonymous
спс, почитаю
Kirill
Anonymous
к сожалению)
Aleksei
Aleksei
канеш есть)
Anonymous
вроде недавно появились?
Aleksei
смотря что считать недавним)
Anonymous
ну значит у реакт нейтива теперь не может быть отмазки
Anonymous
что это не надо делать
Anonymous
тк они есть на обоих платформах
⩔wein
Anonymous
я уже коллбеком обошелся
Anonymous
одним)
Anonymous
тащить каких то монстров ради такой фигни мне кажется сомнительно
Kirill
они для стейт менаджмента потому что
Anonymous
опен сорс бывает разный
Anonymous
и что значит сделать - это в апстрим попадет?
Anonymous
или мне надо форкать все)
Anonymous
и создавать react native widget edition
Aleksei
PR делаешь и попадет если проверку ревьюеров пройдет
Aleksei