You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native报TypeError: _this.props.loginState is not a function问题求助

核心问题1:Drawer.Screen传参方式错误

React Navigation的Drawer.Screen不支持直接在标签上写自定义属性传递给子组件,你写的loginState={changeLoginState}不会传递到Login组件内,导致this.props.loginState为undefined,调用时自然报「不是函数」的错误。

核心问题2:登录状态不是响应式状态

你在App组件内定义的let isLoggedIn = false是普通JS变量,修改它不会触发App组件重渲染,就算成功调用了状态修改方法,界面也不会自动切换。


修正后App.js完整代码

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createDrawerNavigator } from '@react-navigation/drawer'
import Account from './src/screens/account';
import Login from './src/screens/Login'

export default function App(){
    // 用useState创建响应式状态,修改会触发组件重渲染
    const [isLoggedIn, setIsLoggedIn] = React.useState(false)
    const Drawer = createDrawerNavigator();

    return(
        <NavigationContainer>
          <Drawer.Navigator initialRouteName="Home">
            {isLoggedIn ? (
              <Drawer.Screen name="Account" component={Account}/>
            ) : (
              <Drawer.Screen name="Inloggen">
                {/* 用回调渲染的方式传递自定义props */}
                {props => <Login {...props} loginState={setIsLoggedIn} />}
              </Drawer.Screen>
            )}
          </Drawer.Navigator>
        </NavigationContainer>
    )
}

修正后Login.js完整代码

import * as React from 'react';
import { Component } from 'react';
import { View, TouchableOpacity, Text } from 'react-native';

class Login extends Component {
    changeLoginState = () => {
        this.props.loginState(true)
    }

    render(){
        return (
            {/* RN默认flex布局,用flex:1撑满全屏,不要用web端的vh单位 */}
            <View style={{flex:1, justifyContent:'center', alignItems:'center'}}>
                <TouchableOpacity style={{backgroundColor: 'red', paddingVertical:12, paddingHorizontal:24}} onPress={this.changeLoginState}>
                  {/* RN所有文本必须包裹在Text组件内 */}
                  <Text style={{color: 'white', fontSize:16}}>Login</Text>
                </TouchableOpacity>
            </View>
        );
    }
}

export default Login

其他优化建议

  • 你原代码里导入的createAppContainer、RootNavigator、PropTypes、getFocusedRouteNameFromRoute都没有用到,可以直接删除减少冗余
  • 后续业务逻辑复杂后可以把登录状态放到React Context中全局管理,避免多层组件传参
  • Login组件如果没有特殊逻辑可以改成函数式组件,代码更简洁

内容的提问来源于stack exchange,提问作者Bjop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:09:02