这里有几个选项,所有选项都与您希望如何实现状态管理密切相关。
首先,一种解决方案是让组件中的用户状态创建DrawerNavigator,并将其传递给您的自定义抽屉组件。这带来了必须在状态更改时重新创建导航器并创建闪烁的缺点。我不建议使用此解决方案,但值得一提。
您也可以使用React Context,将您的用户状态放在顶级组件中,创建一个提供者将用户作为值传递给它,并使您的抽屉成为此上下文的消费者。这样,每次用户更改您的抽屉组件时,都会重新渲染。
我个人使用的是 Redux 将我的 Drawer 直接连接到我的全局状态。它涉及一些设置,但最终还是值得的。根组件可能如下所示:
import React from 'react'
import { Provider } from 'react-redux'
export default () => (
<Provider store={store}>
<App />
</Provider>
)
store 的结果是:
import { createStore, combineReducers } from 'redux'
import reducers from './reducers'
const store = createStore(combineReducers(reducers))
您的 reducer 将成为您应用的状态,其中一个专用于您的用户数据。
那么你的 Drawer 组件可能是:
import React, { Component } from 'react'
import { View, Text } from 'react-native'
import { connect } from 'react-redux'
@connect(({ user }) => ({ user }))
class Drawer extends Component {
render () {
const { user } = this.props
return (
<View>
<Text>My name is {user.name}</Text>
</View>
)
}
}
export default Drawer
现在,每次您更改用户 reducer 时,此 Drawer 组件都会重新渲染。
关于 Redux,您应该了解一些事情,因此您可能应该阅读一下 Getting Started docs。