react-native - 如何更改同一组件中的标题导航?
问题描述
我的导航 initializeRoute 屏幕是 main.js
main.js 有一个 onAuthStateCHange 来检测当前用户的更改
如果当前用户是 loggend 主渲染组件“ChatScreen”,否则主渲染组件“LoginScreen”
问题是 chatScreen 和 LoginScreen 具有相同的导航标题栏(主标题栏)
我需要 loginscreen 没有标题,而 chatScreen 有
我尝试
在登录和聊天中使用静态 navigationOptions = {header: null},但我们可以看到的 de header 是 main.js 的 header
如果我在 main 上设置 header null,则 chatScreen 也没有标题
class App extends React.Component {
constructor() {
super();
this.unsubscriber = null;
this.state = {
user: null,
};
}
componentDidMount() {
this.unsubscriber = firebase.auth().onAuthStateChanged((user) => {
this.setState({ user });
});
}
render() {
if (!this.state.user) {
return <Login />;
}
return <Chat />;
}
}
解决方案
解决方案是 main.js 屏幕中的以下内容,您可以保留导航。
// main.js
static navigationOptions = ({ navigation }) => {
return { title: "", header: null
};
};
然后在 ChatScreen 屏幕中,您可以在不依赖 react-navigation 库的情况下个性化标题,您可以以个性化的方式进行操作。
// Chat.js
class Chat extends Component {
render() {
return (
<SafeAreaView>
{/*header*/}
<View style={{justifyContent: 'center', alignItems: 'center'}}>
<Text>Chat</Text>
</View>
{/*body*/}
<View>
</View>
</SafeAreaView>
);
}
}
export default Chat;
子组件 Chat 必须接收导航属性
<Chat navigation={this.props.navigation} />
反过来聊天的孩子应该通过。
<SonChat navigation={this.props.navigation} />
推荐阅读
- templates - 我试图向我的班级添加一个新的模板帮助函数,但现在我收到了 LNK2001 错误。怎么修?
- c++ - Are the answers of this C++ quiz correct?
- cordova - 如何在网络上托管 Ionic/Capacitor 应用程序?
- javascript - 无法使用 Redux-saga 作为我的中间件从 React Native 中的 API 接收数据
- java - 将对象插入到已创建的实体(ManyToOne 和 OneToMany)
- python - Python MySql 循环使用了系统资源
- javascript - 需要使用node js在循环中调用两个API
- flask - 在父模型的详细信息页面中显示内联模型?烧瓶,SQLAlchemy
- c# - 如何在运行后检查用户控件上的所有复选框
- sql - 在多个存在条件下使用子查询结果