React-native-router-flux: _reactNativeRouterFlux.Actions.Teams не является функцией

Созданный на 11 июл. 2017  ·  39Комментарии  ·  Источник: aksonov/react-native-router-flux

У меня есть вкладки и внутри вкладок, у меня есть домашняя сцена, а внутри нее у меня есть командная сцена.

Вот мой код

 <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(); который выдает эту ошибку.

Мне нужно, чтобы команда просматривала часть домашнего стека, а не отдельную вкладку.

Самый полезный комментарий

Вы пишете Key с большой буквы K. Это key

Все 39 Комментарий

Дубликат № 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>

Когда я нажимаю на любую из вкладок, т.е. лайкаю фотографии, я получаю следующую ошибку
screen shot 2017-07-11 at 2 24 40 am

Странно, не могли бы вы раскошелиться и воспроизвести его с помощью примера?

Я также пробовал это

 <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 .

и та же ошибка
screen shot 2017-07-11 at 3 08 13 am

И где 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 и получил следующую ошибку.
screen shot 2017-07-11 at 6 10 16 am

У вас есть рабочий пример этого или как это сделать, я получаю фрагменты

Я не вижу вашего кода. Пожалуйста, дайте мне ссылку на вилку примера для воспроизведения.

Я добавил оболочку Redux, и пример работает без проблем.

@aksonov не могли бы вы прислать мне пример с редуксом, который у вас есть, я был бы рад посмотреть и понять, почему он не работает для меня

Извините, не сохранил - был пустой редьюсер (магазин), Провайдер и подключенный Роутер, ничего особенного. Пожалуйста, пришлите мне ссылку на ваш пример вилки и я попытаюсь запустить.

Я не могу отправить текущий проект, но он не работает, вы видите сообщение об ошибке, и вы видите мой код, точно такой же, как в примере

Так что просто форкните пример, добавьте туда Redux и пришлите мне ссылку. У меня нет времени создавать новые проекты и экспериментировать, извините.

Хорошо, я смог воссоздать проблему в кодовой базе примера проекта - https://www.dropbox.com/s/f7cfrvsllaqd054/Example.zip?dl=0

Вот проблема
screen shot 2017-07-12 at 6 27 13 am

Я думаю, что в вашем примере, который работает, причина, по которой он работает, заключается в том, что вы загружаете один и тот же компонент 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

оказывать() {
возвращение (

Вы пишете Key с большой буквы K. Это key

Была ли эта страница полезной?
0 / 5 - 0 рейтинги