可以使用終極版做到這一點:
AuthIcon.js:
const LOGGED_IN_IMAGE = require(...)
const LOGGED_OUT_IMAGE = require(...)
class AuthIcon extends React.Component {
render() {
const { loggedIn, focused, tintColor } = this.props
// loggedIn is what tells your app when the user is logged in, you can call it something else, it comes from redux
return (
<View>
<Image source={loggedIn ? LOGGED_IN_IMAGE : LOGGED_OUT_IMAGE} resizeMode='stretch' style={{ tintColor: focused ? tintColor : null, width: 21, height: 21 }} />
</View>
)
}
}
const ConnectedAuthIcon = connect(state => {
const { loggedIn } = state.auth
return { loggedIn }
})(AuthIcon)
export default ConnectedAuthIcon;
那麼你的TabNavigator的文件中:
import ConnectedAuthIcon from './AuthIcon.js'
export default TabNavigator({
Auth: {
screen: Auth,
navigationOptions: ({ navigation }) => ({
tabBarLabel: null,
tabBarIcon: ({ tintColor, focused }) => <ConnectedAuthIcon tintColor={tintColor} focused={focused} />,
title: "Auth"
})
}
})
編輯:
在你Auth.js :
class Auth extends React.Component {
render() {
const { loggedIn } = this.props
if (loggedIn) {
return <Profile />
} else {
return <Login />
}
}
}
export default connect(state => {
const { loggedIn } = state.auth
return { loggedIn }
})(Auth)
那個圖標的相應屏幕如何?我的意思是當它登錄時的動作和登出時的動作。 – Jed
簡單。你的Auth組件也會連接到redux,如果loggedIn爲true,它將呈現配置文件,否則登錄。配置文件和登錄可以是單獨的組件,你有條件地渲染相應的一個在Auth –
對不起,我是新的redux和反應導航,所以我不知道你剛纔說什麼。如果你能展示一個例子,將會非常感激。 :)我爲這個麻煩道歉。 – Jed