Javascript 渲染屏幕时自动调用函数

Javascript 渲染屏幕时自动调用函数,javascript,react-native,navigation,expo,stack-navigator,Javascript,React Native,Navigation,Expo,Stack Navigator,因此,我有一个标题栏,当我用stackNavigation打开配置文件屏幕时,我会隐藏它 档案屏幕: export default class ProfileScreen extends React.Component { constructor(props) { super(props); props.screenProps.updateHeader(); } // Code goes on //.......... //............

因此,我有一个标题栏,当我用stackNavigation打开配置文件屏幕时,我会隐藏它

档案屏幕:

export default class ProfileScreen extends React.Component {
    constructor(props) {
        super(props);
        props.screenProps.updateHeader();
    }
// Code goes on
//..........
//................
//...........................
}
export default class Main extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            showHeader: true
        };
    }

    updateState = () => {
        this.setState({
            showHeader: !this.state.showHeader
        });
    }

    render() {
        return (
            <View style={styles.container}>
                {renderIf(this.state.showHeader,
                    <Header />
                )}
               <UserStack screenProps={{ updateHeader: this.updateState }} />
             </View>
        );
     }
}
这将从父类调用updateHeader,然后调用函数

Main(父类):

export default class ProfileScreen extends React.Component {
    constructor(props) {
        super(props);
        props.screenProps.updateHeader();
    }
// Code goes on
//..........
//................
//...........................
}
export default class Main extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            showHeader: true
        };
    }

    updateState = () => {
        this.setState({
            showHeader: !this.state.showHeader
        });
    }

    render() {
        return (
            <View style={styles.container}>
                {renderIf(this.state.showHeader,
                    <Header />
                )}
               <UserStack screenProps={{ updateHeader: this.updateState }} />
             </View>
        );
     }
}
导出默认类Main.Component{
建造师(道具){
超级(道具);
此.state={
showHeader:正确
};
}
updateState=()=>{
这是我的国家({
showHeader:!this.state.showHeader
});
}
render(){
返回(
{renderIf(this.state.showHeader,
)}
);
}
}
它工作起来有点慢

当我导出项目时,它会工作得更好吗

我也收到了这样的警告:

警告:无法在现有状态转换期间更新(例如在
render
或其他组件的构造函数中)。渲染方法应该是道具和状态的纯函数;构造函数的副作用是一种反模式,但可以移动到
组件willmount


我该怎么做才能解决这个问题呢?

正如埃维扎德所说的那样

componentWillMount() { this.props.screenProps.updateHeader(); }

而不是构造函数修复了警告。

well可能会调用
props.screenProps.updateHeader()是问题吗<代码>无法在现有状态转换期间更新(例如在渲染或其他组件的构造函数中)。
@ewizard您是对的。从按钮内部调用它是可行的,但问题是我的应用程序使用滑动导航,因此每次页面呈现时它都应该自动调用该函数。哦,我认为错误消息是告诉您使用生命周期挂钩
componentWillMount
…在
配置文件屏幕中尝试
组件-
组件willmount(){props.screenProps.updateHeader();}
并从构造函数中取出
props.screenProps…