Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 抽屉中的注销导航在使用asyncstorage的React Native中不起作用?_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 抽屉中的注销导航在使用asyncstorage的React Native中不起作用?

Javascript 抽屉中的注销导航在使用asyncstorage的React Native中不起作用?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我已经在抽屉导航中创建了注销按钮。当用户单击注销按钮时,按钮被单击,异步存储也被清除,但它没有导航到登录屏幕为什么?用户单击“注销”按钮后,会被单击,但用户不会被导航到注册/登录屏幕,即登录屏幕。为什么 抽屉驱动组件: class DrawerScreen extends Component { logoutUser = async () => { console.log('Logout clicked') try { await AsyncSt

我已经在抽屉导航中创建了注销按钮。当用户单击注销按钮时,按钮被单击,异步存储也被清除,但它没有导航到登录屏幕为什么?用户单击“注销”按钮后,会被单击,但用户不会被导航到注册/登录屏幕,即登录屏幕。为什么

抽屉驱动组件:

class DrawerScreen extends Component {

  logoutUser = async () => {
    console.log('Logout clicked')

      try {
        await AsyncStorage.clear();
        this.props.logout();
        this.props.navigation.closeDrawer();
        this.props.navigation.navigate('Login');
      } catch (error) {
         console.log("Error in clearing AsyncStorage", error);
      }
  }

  render () {

    const { logged_in_user } = this.props;

    return (
      <SafeAreaView style={{flex: 1}}>
        <ScrollView>

          <TouchableOpacity onPress={() => this.props.navigation.closeDrawer()}>
              <Image source={require('../../assets/images/close.png')} style={{width: 24, height: 24, resizeMode: 'contain', marginLeft: 15, marginTop: 15}}/>
          </TouchableOpacity>
    </ScrollView>

      <TouchableOpacity onPress={this.logoutUser}>
            <View style={styles.bottomDrawerItem2}>
                <Image source={require('../../assets/images/logout.png')} style={styles.drawerItemImage}/>
                <Text style={styles.drawerItemText}>Logout</Text>
            </View>
          </TouchableOpacity>
          </View>
      </SafeAreaView>
    );
  }
}
重演:

行动:

function login(logged_in_user) {
  return {
    type: LOGIN,
    logged_in_user
  };
}

function logout() {
  return {
    type: LOGOUT,
  };
}
减速器:

const initialLoginState = {
  logged_in_user: null
};

function loginReducer(state = initialLoginState, action) {
  switch (action.type) {
    case LOGIN:
      return { ...state, logged_in_user: action.logged_in_user };
    case LOGOUT:
      return { ...state, logged_in_user: null };
    default:
      return state;
  }
}

登录用户是LoginContainer的道具吗?请明确此变量的来源。在这种情况下,这是异步存储,而不是组件的支柱。 我怀疑登录用户总是解析为false,这就是为什么注销永远不起作用的原因

        let { navigation, login } = this.props;
        let logged_in_user = await AsyncStorage.getItem('logged_in_user');

        if (!logged_in_user) {

            logged_in_user = await AsyncStorage.setItem('logged_in_user', !logged_in_user);
            login(true);
        }
        if (logged_in_user) {
            logged_in_user = await AsyncStorage.setItem('logged_in_user', !logged_in_user);
            navigation.navigate('SignedIn');
        }

Iogged_in_用户来自redux,请参阅我添加的操作和减速机的问题。
const initialLoginState = {
  logged_in_user: null
};

function loginReducer(state = initialLoginState, action) {
  switch (action.type) {
    case LOGIN:
      return { ...state, logged_in_user: action.logged_in_user };
    case LOGOUT:
      return { ...state, logged_in_user: null };
    default:
      return state;
  }
}
        let { navigation, login } = this.props;
        let logged_in_user = await AsyncStorage.getItem('logged_in_user');

        if (!logged_in_user) {

            logged_in_user = await AsyncStorage.setItem('logged_in_user', !logged_in_user);
            login(true);
        }
        if (logged_in_user) {
            logged_in_user = await AsyncStorage.setItem('logged_in_user', !logged_in_user);
            navigation.navigate('SignedIn');
        }