Bogdan
Выкинуть 5 роутинг, делать через свич, если хочется 5, покинуть ридакса тор можно в него и конект это конект, ему плевать на роут
Anatoly
А вот configureStore() import {applyMiddleware, createStore} from 'redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; export default function configureStore(initialState) { return createStore(rootReducer, initialState, applyMiddleware(thunk)); }
S
Да блин, я полгода с RN работаю. Я знаю как коннектить на вложенных страницах. Вопрос в том, что React Navigation v5 по-другому работает. И я не могу воспроизвести пример их Authentication flow на _классовых_ компонентах (у них везде функциональные в примерах).
Вопрос нужно формулировать точнее, а то когда видишь вопрос о том как заюзать редьюсер в рендере, возникает ощущение что человек новичок, и ему нужна помощь именно в том что бы разобраться
S
можно теперь по-русски, пжлст)
Можно кусок этого кода не картинкой. и покажу
S
выше этого АПП или нет?
Anatoly
выше этого АПП или нет?
Нет, App - верхний уровень. Тут мы создаём провайдер и navigation container
Timofeev
можно теперь по-русски, пжлст)
useEffect(() => { async function fetchData(): Promise<void> { setShowLoading(true); try { await storageService.fetchRecalls(); } catch (e) { console.error(e) } finally { setShowLoading(false); } } fetchData(); }, []);
Bogdan
export default connect(mapStateToProps, {login})(App) это? Так он крашится и не даёт
покажи mapStateToProps, второй аргумент - диспач, функу нужно оберонуть в него
S
useEffect(() => { async function fetchData(): Promise<void> { setShowLoading(true); try { await storageService.fetchRecalls(); } catch (e) { console.error(e) } finally { setShowLoading(false); } } fetchData(); }, []);
useEffect(() => { let isUnmounted = false; async function fetchData(): Promise<void> { if (isUnmounted) { return; } setShowLoading(true); try { await storageService.fetchRecalls(); } catch (e) { console.error(e) } finally { setShowLoading(false); } } fetchData(); return () => { let isUnmounted = true; } }, []);
Anatoly
покажи mapStateToProps, второй аргумент - диспач, функу нужно оберонуть в него
const mapStateToProps = state => ({ userReducer: state.userReducer, }); У меня login и есть dispatch в экшене. Он из экшена импортируется. Но приложение так не работает, крашится
Anatoly
Anatoly
покажи логин свой, покажи подключение к провайдеру, покажи как берешь данные
export const login = userData => async dispatch => { // TODO: получаем user из ответа сервера const user = {}; dispatch({ type: USER_LOG_IN, payload: user, }); };
Anatoly
А где рендеришь <Provider> ?
https://pastebin.com/60CjGnMs вот код. Это index.js.
Энлов Свичблейд
S
https://pastebin.com/60CjGnMs вот код. Это index.js.
ну это же бред пихать стор редакса в контекст реакта
S
для редакса нужен провайдер его
S
https://react-redux.js.org/5.x/api/provider#docsNav
Anatoly
ну это же бред пихать стор редакса в контекст реакта
Я пилил с оглядкой на доку: https://reactnavigation.org/docs/en/auth-flow.html У меня есть рабочие варианты для React navigation v4. Просто уже многое сделано на v5, переделывать всё заново нет желания
Anatoly
так еще и логин получает данные userData, а в примере выше их нету
Ну это их пока нету, потому что фейковая авторизация
S
на контексте реакта
Anatoly
они сделал пример без привязки к редаксу
Что поделать - я так и не смог найти пример с привязкой к редаксу. Поэтому и написал сюда - я вчера полночи в гугле провёл и хрен чего нашёл
S
ну вот это и нужно было спрашивать 🙂 а не как получить доступ к редьюсеру 😉
Anatoly
Если кто-то делал аналогичное на v5 с использованием redux - буду признателен.
S
Если кто-то делал аналогичное на v5 с использованием redux - буду признателен.
в чем проблема заменить твой контекст на провайдер редакса?
Anatoly
ну вот это и нужно было спрашивать 🙂 а не как получить доступ к редьюсеру 😉
Ну так я уже написал, ок, неправильно сформулировал.
S
провайдер сделай самым верхнем компонентом в апке, и будет в роутера к нему доступ
Anatoly
Всё равно, если пытаюсь connect вызвать - падает
S
Ессесн, нужно вынести в отдлеьный компонент и врапнуть Апп
Bogdan
Так?
а почему App сразу в провайдер не обернуть? будет понятнее, а коннект у тебя тоже свой или ридаксовый?
S
Ессесн, нужно вынести в отдлеьный компонент и врапнуть Апп
если провайдер в этом же файле, то коннект не нужен, моно так юзать стор
S
он вон у тебя есть, бери и юзай что нужно но опять же ты из локального видимо стейта берешь залогинен ююзвер или нет, а не из стора
Bogdan
касательно модалки, что вчера говорили https://github.com/jacklam718/react-native-modals эта очень крутая, не лагает, мощ, но есть минусы, нету типов, не прокинуты стили в оверлей, хотя наверное это не особо минусы , можно форкнуть и переделать себе
Anatoly
Не вижу доступа к стейту
S
store.getState()
Anatoly
он вон у тебя есть, бери и юзай что нужно но опять же ты из локального видимо стейта берешь залогинен ююзвер или нет, а не из стора
ну сейчас-то да, потому что я не могу получить доступ к глобальному. вот это и пытаюсь сделать
Bogdan
getState оно, но тебе коннект внутри это сделает, юзай через коннект
S
getState оно, но тебе коннект внутри это сделает, юзай через коннект
Он хочет приконнектить компоненнту в которой провайдер сам живет - так не выйдет, он берет выше из контекста
Bogdan
Да не работает через коннект
да у всех в мире работает, а у тебя нет
Anatoly
store.getState()
Во, оно самое. Спасибо.
S
либо выносить выше провайдер и коннектить, либо же юзать стор на прямую
Bogdan
Он хочет приконнектить компоненнту в которой провайдер сам живет - так не выйдет, он берет выше из контекста
короче, я тогда хз что он делает, очевидную глупость 100%, обернуть корень в провайдер для слабых
Bogdan
Вот так и не работает
да потому что провайдер не там, где нужно
Bogdan
корень обернуть в провайдер
S
ну понятно не работает
Bogdan
Provider App Provider
crazyHero
Привет ребят, я уже обращался, попробую еще раз, при запуске react-native run-android получаю ошибочку "socket hung up", пробовал - adb reverse tcp:8000 tcp:8000 - переустанавливал модули - менял порты и еще куча всего не упомнить, абсолютно ничего не помогает, пожалуйста направьте куда-нибудь, идеи может быть
crazyHero
ох в консоли еще показывает "badconnectionError", я делаю только фронтенд, кстати на iOS все грузится нормально, была бы проблема со стороны бэкендеров обратился бы к ним,,,,,а так
Yurii
Вот так и не работает
вам вот такая схема нужна function AppContainer() { return ( <Provider store={store}> <App /> <Notification /> </Provider> ); } AppRegistry.registerComponent(appName, () => AppContainer);
Yurii
и оберните там все в провайдер
Bogdan
а что со стилями не так?
что бы модалку прибить к низу, нужно свою обертку сделать, flex: 1 ей, прозрачность, но она будет не оверлеем и плавно не сменится
Anatoly
@Yra_Zinchenko @sshmyg @bshelomanov Спасибо большое! Вынес <Provider> в другой файл, в него импортнул свой App, теперь работает.
Yurii
👍
Das
Ребят всем привет, вопрос про react не native
Das
А именно redux
Yurii
и все анимации и оверлей сохраняться
Das
А именно redux
Не подскажете с redux?
Bogdan
не понял, делаете <Modal {config}> тело модалки </Modal>
не понял, я имею ввиду, что бы flex-end работал, нужно обернуть модалку в компонент, компоненту flex:1, в нем уже выровнять тело модалки, тогда норм, но эта обертка во весь екран, накроет оверлей, что за конфиг?
S
Не подскажете с redux?
Сразу вопрос пиши, будет быстрее 😉
Yurii
не понял, я имею ввиду, что бы flex-end работал, нужно обернуть модалку в компонент, компоненту flex:1, в нем уже выровнять тело модалки, тогда норм, но эта обертка во весь екран, накроет оверлей, что за конфиг?
<Modal isVisible = {isVisible} style = {styles.modalContainer} onBackdropPress = {this.handleCloseModal} deviceWidth = {deviceWidth} deviceHeight = {deviceHeight} backdropTransitionOutTiming = {500} backdropTransitionInTiming = {500} animationOutTiming = {500} useNativeDriver = {Platform.OS === 'android'} propagateSwipe > modalContainer : { flex : 1, justifyContent : 'flex-end', margin : 0 },