У меня есть вкладки и внутри вкладок, у меня есть домашняя сцена, а внутри нее у меня есть командная сцена.
Вот мой код
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key='Home' component={Home} title='Home' initial={true}>
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
</Scene>
Но я не могу перейти к представлению/сцене команды
У меня есть Actions.Teams(); который выдает эту ошибку.
Мне нужно, чтобы команда просматривала часть домашнего стека, а не отдельную вкладку.
Дубликат № 1988. Вы должны использовать пользовательские navigator
для контейнерных сцен. Это не сложно, просто проверьте LightboxNavigator.js как часть RNRF.
В V4, если у вашей сцены есть component
, то это CHILD.
Где находится LightboxNavigator.js?
Я не уверен, что полностью понимаю, в чем смысл этого делать в react-native-router-flux? Есть ли какие-либо документы по этому поводу?
Документация будет позже, но в этом случае я мог бы задокументировать ее здесь. LightingboxNavigator — яркий пример пользовательского контейнера — он отображает основное представление и другие «активные» представления в виде наложения — полезно для всплывающих окон. Вы можете скопировать код и изменить его так, как вам нужно, например, отобразить сразу всех дочерних элементов и т. д. Затем передать его как реквизит navigator
для сцены контейнера.
Ну, это работает так же с редуксом, а также я все еще хочу, чтобы вкладка для дома отображалась для команд. Команды IE находятся под домом?
Это кажется немного излишним и сложным, было бы неплохо иметь гораздо более простой способ вызова дочерних представлений, например, что-то вроде Actions.Child(Teams); и просто зарегистрируйте его под домом, просто предложение.
Прямо сейчас я не совсем понимаю LightingboxNavigator? Также, если я понимаю, о чем вы говорите, мне нужно создать контейнер IE «основной», который содержит домашнюю и командную представления (команда становится всплывающим/наложенным представлением). У этого есть вкладки как часть контейнера, как тогда это загружается в app.js с редуксом — это то же самое, что просто загрузить другой компонент
Думаю, мне нужно увидеть пример или код для «Затем передайте его как опору навигатора для сцены контейнера».
Пример кода, который у вас есть, этого не показывает, есть ли сложные примеры, показывающие вложенные сцены
import MainNavigator from '../YOUR_CUSTOM_NAVIGATOR';
...
<Scene key="main" navigator={MainNavigator}>
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
или вы можете просто попробовать лайтбокс уже:
<Scene key='lightbox' lightbox>
<Scene key='Home' component={Home} />
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
Таким образом, он будет отображать Home, а после Actions.Teams будет отображаться Home & Teams в виде наложения.
MainNavigator имеет тот же код, что и LightboxNavigator? Если я думаю, что начинаю понимать.
Я также рад помочь с документацией или примерами, особенно тем, что я делаю.
Да, не стесняйтесь отправлять PR. Вы пробовали второй способ (лайтбокс)?
Я пробовал следующее
<Scene key='lightbox' lightbox>
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key='Home' component={Home} title='Home' initial={true} >
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
<Scene key='Photos' component={Photos} title='Photos' initial={false} />
<Scene key='SiteDiary' component={SiteDiary} title='SiteDiary' initial={false} />
</Scene>
</Scene>
Когда я нажимаю на любую из вкладок, т.е. лайкаю фотографии, я получаю следующую ошибку
Странно, не могли бы вы раскошелиться и воспроизвести его с помощью примера?
Я также пробовал это
<Scene key='lightbox' lightbox>
<Scene key='Home' component={Home} />
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
Который отлично работает, поэтому я бы сказал, что он не работает внутри вкладок.
Не могли бы вы проверить пример, поместите всплывающую ссылку «Ошибка» внутри вкладок. Если это не работает, пожалуйста, создайте проблему, и я постараюсь исправить
Я тоже так пробовал, не получилось
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key='lightbox' lightbox>
<Scene key='Home' component={Home} title='Home' initial={true} >
<Scene key='Teams' component={Teams} title='Teams' initial={false} />
</Scene>
</Scene>
<Scene key='Photos' component={Photos} title='Photos' initial={false} />
<Scene key='SiteDiary' component={SiteDiary} title='SiteDiary' initial={false} />
</Scene>
Загружает ли лайтбокс модель? или он загружает страницу/просмотр, как дома?
Отмените упаковщик, возможно, он уже запущен для другого приложения…
11 июля 2017 г., в 11:38, Almog [email protected] написал:
Я даже не могу запустить пример, не уверен, что происходит, когда впервые вижу эту ошибку
https://user-images.githubusercontent.com/169507/28062199-017ad172-65e2-11e7-9aef-893f2812566f.png
—
Вы получаете это, потому что вы изменили состояние открытия/закрытия.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://github.com/aksonov/react-native-router-flux/issues/2007#issuecomment-314390291 или отключите ветку https://github.com/notifications/ unsubscribe-auth/ABQpcW4xyBUTVwSV8T3m0wqwENB20Z8kks5sM0KTgaJpZM4OTmiE .
Да, исправил, удалил комментарий, сейчас 3 часа ночи :)
Чего я не понимаю, так это того, что в примере у вас это работает, а когда я делаю то же самое, это не так.
Единственная разница в том, что я использую Redux, может ли это быть причиной проблемы?
@aksonov Я смог воссоздать проблему в примере кода, это пример кода
<Scene key="lightbox" lightbox>
<Scene key="root" hideNavBar hideTabBar>
<Scene key="tabbar" gestureEnabled={false} tabs tabBarStyle={styles.tabBarStyle} activeBackgroundColor='#ddd'>
<Scene key="tab1" title="Tab #1" tabBarLabel="TAB #1" icon={TabIcon} navigationBarStyle={{backgroundColor: 'red'}} titleStyle={{color: 'white'}}>
<Scene key="tab1_1" component={TabView} title="Tab #1_1" onRight={() => alert('Right button')} rightTitle="Right"/>
<Scene key="tab1_2" component={TabView} title="Tab #1_2" back titleStyle={{color: 'black'}}/>
</Scene>
<Scene key="tab2" initial title="Tab #2" icon={TabIcon}>
<Scene
key="tab2_1"
component={TabView}
title="Tab #2_1"
renderRightButton={() => <Text>Right</Text>}
/>
</Scene>
</Scene>
</Scene>
</Scene>
Я удалил
<Scene key="modal" modal hideNavBar>
<Scene key="drawer" drawer contentComponent={TabView} >
Вы пытались открыть всплывающее окно «Ошибка» на вкладке и получили ошибку?
Вот суть файла примера - https://gist.github.com/AlmogRnD/a395e6212d702d151d23e4661b68e5fa .
и та же ошибка
И где tab2_2 в вашей сути?
Да, это моя ошибка, но в моем коде все еще не так, разница только в том, что я использую избыточность.
у меня он завернут в
<Provider store={store}>
<ConnectedRouter>
Мой код такой же, как и пример кода, ожидающий провайдера и подключения маршрутизатора.
вот
<Provider store={store}>
<ConnectedRouter>
<Scene key="lightbox" lightbox>
<Scene key="modal" modal hideNavBar>
<Scene key="drawer" drawer contentComponent={Photos} >
<Scene key="root">
<Scene key="login" component={Login} initial={true} title={'Login'} />
<Scene key="ResetPassword" component={ResetPassword} title={'Reset Password'} />
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key='Home' component={Home} title='Home' initial={true} >
<Scene key='teams' component={Teams} title='Teams' initial={false} />
</Scene>
<Scene key='Photos' component={Photos} title='Photos' initial={false} />
<Scene key='SiteDiary' component={SiteDiary} title='SiteDiary' initial={false} />
</Scene>
</Scene>
</Scene>
</Scene>
</Scene>
</ConnectedRouter>
</Provider>
Смотрите мое сообщение выше:
В V4, если у вашей сцены есть компонент, то это CHILD.
PS Я добавил это в "критические изменения"
Таким образом, единственный способ - использовать пользовательские навигаторы, но тогда почему лайтбокс не работает, если я заверну его внутрь, он должен работать?
Кроме того, если я создаю настраиваемые навигаторы, как мне определить «статический маршрутизатор = MyRouter;»?
Кроме того, я скопировал LightboxNavigator.js и получил следующую ошибку.
У вас есть рабочий пример этого или как это сделать, я получаю фрагменты
Я не вижу вашего кода. Пожалуйста, дайте мне ссылку на вилку примера для воспроизведения.
Я добавил оболочку Redux, и пример работает без проблем.
@aksonov не могли бы вы прислать мне пример с редуксом, который у вас есть, я был бы рад посмотреть и понять, почему он не работает для меня
Извините, не сохранил - был пустой редьюсер (магазин), Провайдер и подключенный Роутер, ничего особенного. Пожалуйста, пришлите мне ссылку на ваш пример вилки и я попытаюсь запустить.
Я не могу отправить текущий проект, но он не работает, вы видите сообщение об ошибке, и вы видите мой код, точно такой же, как в примере
Так что просто форкните пример, добавьте туда Redux и пришлите мне ссылку. У меня нет времени создавать новые проекты и экспериментировать, извините.
Хорошо, я смог воссоздать проблему в кодовой базе примера проекта - https://www.dropbox.com/s/f7cfrvsllaqd054/Example.zip?dl=0
Вот проблема
Я думаю, что в вашем примере, который работает, причина, по которой он работает, заключается в том, что вы загружаете один и тот же компонент TabView
В отправленном мной коде я загружаю разные компоненты
<Scene
key="tab1_1"
component={TabView}
title="Tab #1_1"
onRight={() => alert('Right button')}
rightTitle="Right"
/>
<Scene
key="tab1_2"
component={TabView}
title="Tab #1_2"
back
titleStyle={{color: 'black'}}
/>
Почему вы не можете просто разветвить проект github?
Во всяком случае, я не вижу там Redux.
И я несколько раз говорил: "В рамках V4, если у вас есть компонент Scene, то это CHILD.", Home здесь - CHILD, поэтому вход внутри не обрабатывается. Зачем ты это делаешь?
class Example extends Component {
render() {
return (
<Router createReducer={reducerCreate}>
<Scene key="lightbox" lightbox>
<Scene key="root">
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key='Home' component={Home} title='Home' initial={true}>
<Scene key='Login' component={Login} title='Login' initial={true}/>
</Scene>
<Scene key='Home2' component={Home} title='Home' initial={true}/>
</Scene>
</Scene>
</Scene>
</Router>
);
}
}
@aksonov привет, у тебя все отлично, и я очень ценю, что ты нашел время и помог. И я планирую помочь с документами или учебными пособиями. Я должен сказать, что ваше объяснение просто не было ясным, может быть, это потому, что я работаю допоздна, или мы оба думали о разных вещах, когда говорили о чем-то.
Кроме того, я не уверен, почему вы не могли отправить что-то вроде этого
<Scene key="tabBar" tabs hideNavBar={true}>
<Scene key="tab1" title="Tab #1" tabBarLabel="TAB #1" icon={TabIcon}>
<Scene key='Home' component={Home} title='Home' initial={true}/>
<Scene key='teams' component={Teams} title='Teams' initial={false} />
</Scene>
<Scene key='Photos' component={Photos} title='Photos' initial={false} />
<Scene key='SiteDiary' component={SiteDiary} title='SiteDiary' initial={false} />
</Scene>
Дело было в том, что у меня не было
<Scene key="tab1" title="Tab #1" tabBarLabel="TAB #1" icon={TabIcon}>
Было бы намного яснее объяснить это, сказав, что вам нужно завернуть это вот так.
Не беспокойтесь, я ценю помощь
App.js
render(){
return(
<Provider store={store}>
<Router navigationBarStyle={styles.navBar}
titleStyle={styles.navBarTitle}
barButtonTextStyle={styles.barButtonTextStyle}
barButtonIconStyle={styles.barButtonIconStyle}
back
navBarButtonColor={{ color: '#fff' }}
>
<Stack key="root" hideNavBar>
<Stack key="loginStack">
<Scene Key="login" component={Login} title="Please Login"/>
<Scene Key="register" component={Register} title="Register"/>
</Stack>
<Stack key="dashboardStack">
<Scene Key="home" component={Home} title="Home"/>
<Scene Key="list" component={List} title="List"/>
<Scene Key="details" component={Details} title="Details"/>
</Stack>
</Stack>
</Router>
</Provider>
);
}
Логин.js
оказывать() {
возвращение (
<View style={styles.formContainer}>
<LoginForm />
</View>
</View>
)
}
проблема в том
_reactNativeRouterFlux.Actions.register не является функцией (в '__reactNativeRouterFlux.Actions.register()',
__reactNativeRouterFlux.Actions.register не определен)
Вы пишете Key
с большой буквы K. Это key
Самый полезный комментарий
Вы пишете
Key
с большой буквы K. Этоkey