【问题标题】:Is there any solution to update Drawer in react-native-router-flux from another components是否有任何解决方案可以从其他组件更新 react-native-router-flux 中的 Drawer
【发布时间】:2018-08-13 06:35:41
【问题描述】:

我正在尝试在 react-native-router-flux 中创建一个动态抽屉。 我的意思是,当我更改场景抽屉时,可以检测现在激活的场景,并可以通过新数据进行自我更新。 我的抽屉里有一个调用 App.js 的组件

<Drawer
    key={'drawer'}
    contentComponent = {() => <DrawerLayout language={this.state.language} />}
    drawerPosition= {this.state.rightOrLeft}

    <Stack key={'root'} hideNavBar>
        <Scene key={'splash'} component={Splash} initial/>
        <Scene key={'login'} component={Login} />
        <Scene key={'home'} component={Home} />
        <Scene key={'about'} component={About} />
    </Stack>
</Drawer>

我希望我能正确解释我的梦想!!!

【问题讨论】:

  • 供以后参考:最后我通过使用 Redux 达到了目标。

标签: react-native drawer react-native-router-flux


【解决方案1】:

如果您使用的是 redux,您可以保留状态并从存储中获取当前场景并进行操作。

如果你没有使用 redux,你仍然可以在没有它的情况下使用它。一种选择是执行以下操作:

  1. 在 DrawerNavigator 中使用 contentComponent 并从单独的 js 文件中获取内容。

    contentComponent: props =&gt; &lt;SideBar {...props} /&gt;

  2. 现在您需要在 App.js 名称中声明全局变量为 currentScene 并将您的主页设置为默认值。

  3. 现在让我们加入 sideBar.js 中,点击每个菜单项将全局变量值更改为所选菜单。

  4. 根据 SideBar.js 中当前场景的值更改 menuItems 列表。

一个很好的例子是 React Native Base Kitchen Sink 示例应用。一旦熟悉了它,请按照四个步骤阅读其中的代码,然后就完成了。

https://github.com/GeekyAnts/NativeBase-KitchenSink

【讨论】:

  • 非常感谢亲爱的朋友,唯一的问题是我无法检测到我的抽屉中何时更改了全局变量,是否有任何解决方案代替 Redux 或在 componentDidMount() 中使用 setInterval
  • 您不需要任何更改事件,您可以将其保存在它将管理它的状态变量中。您还可以将当前屏幕的值存储在 asyncStorage 中,或者如果您正在使用领域,则可以存储在领域对象中,尽管这不是最佳实践。如果你改用 redux 那就更好了。 @AliEsfandiari
  • 终于用redux达到了目的,一开始真的很复杂,谢谢朋友。
  • 如果有帮助,请将答案标记为正确。另外,如果您可以上传redux学习项目并分享链接,将对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 2021-04-28
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
相关资源
最近更新 更多