Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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
Reactjs React-Native假定组件Willmount在React-hooks版本中不工作_Reactjs_React Native - Fatal编程技术网

Reactjs React-Native假定组件Willmount在React-hooks版本中不工作

Reactjs React-Native假定组件Willmount在React-hooks版本中不工作,reactjs,react-native,Reactjs,React Native,您好,我正在react native中构建一个登录屏幕,我想创建一个记住信息,但如果我更改了屏幕,则该信息仍然存在。如果复选框为false,我将使用secure store访问存储 我在互联网上搜索过,解决方法是让一个组件在渲染完所有内容后挂载,但假设使用中的组件不起作用 import React, { useState, useEffect } from 'react'; import { Text, View, StyleSheet, Button } from 'react-nat

您好,我正在react native中构建一个登录屏幕,我想创建一个记住信息,但如果我更改了屏幕,则该信息仍然存在。如果复选框为false,我将使用secure store访问存储

我在互联网上搜索过,解决方法是让一个组件在渲染完所有内容后挂载,但假设使用中的组件不起作用

    import React, { useState, useEffect } from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';
import { Card, Icon, Input, CheckBox } from 'react-native-elements';
import * as SecureStore from 'expo-secure-store';

const Login = (props) => {

    const [username, setUsername] = useState('');
    const [password, setPassword] = useState('');
    const [remember, setRemember] = useState(false);
    

useEffect(() => {
    SecureStore.getItemAsync('userinfo')
        .then((userdata) => {
            let userinfo = JSON.parse(userdata);
            if (userinfo) {
                setUsername(userinfo.username);
                setPassword(userinfo.password);
                setRemember(true);
            }
        })
}, [])

const handleLogin = () => {
    console.log(JSON.stringify(username, password, remember));
    if (remember === true) {
        SecureStore.setItemAsync(
                'userinfo',
                JSON.stringify({username: username, password: password })
            )
            .catch(error => console.log(`Could not save user info ${error}`));
    }
    else {
        SecureStore.deleteItemAsync('userinfo')
            .catch(error => console.log(`Could not save user info ${error}`));
    }
}

    return (
        <View style={styles.container}>
            <Input 
                placeholder='Username'
                leftIcon={{ type: 'font-awesome', name: 'user-o' }}
                onChangeText={(username) => setUsername(username)}
                inputContainerStyle={styles.formInput}
                />
            <Input 
                placeholder='Password'
                leftIcon={{ type: 'font-awesome', name: 'key' }}
                onChangeText={(password) => setPassword(password)}
                inputContainerStyle={styles.formInput}
                />
            <CheckBox
                title='Remember Me'
                center
                checked={remember}
                onPress={() => setRemember(!remember)}
                containerStyle={styles.formCheckbox}
                />
            <View style={styles.formButton}>
                <Button
                    onPress={() => handleLogin()}
                    title='Login'
                    color='#512DA8'
                    />
            </View>
        </View>
    );
}
export default Login;
import React,{useState,useffect}来自“React”;
从“react native”导入{文本、视图、样式表、按钮};
从“react native elements”导入{卡片、图标、输入、复选框};
从“世博安全商店”导入*作为安全商店;
常量登录=(道具)=>{
const[username,setUsername]=useState(“”);
const[password,setPassword]=useState(“”);
常量[记住,设置记住]=useState(false);
useffect(()=>{
SecureStore.getItemAsync('userinfo')
.然后((用户数据)=>{
让userinfo=JSON.parse(userdata);
如果(用户信息){
setUsername(userinfo.username);
设置密码(userinfo.password);
记住(正确);
}
})
}, [])
常量handleLogin=()=>{
log(JSON.stringify(用户名、密码、记住));
如果(记住===true){
SecureStore.setItemAsync(
“用户信息”,
stringify({username:username,password:password})
)
.catch(error=>console.log(`无法保存用户信息${error}`));
}
否则{
SecureStore.deleteItemAsync('userinfo')
.catch(error=>console.log(`无法保存用户信息${error}`));
}
}
返回(
setUsername(username)}
inputContainerStyle={styles.formInput}
/>
设置密码(密码)}
inputContainerStyle={styles.formInput}
/>
setRemember(!remember)}
containerStyle={styles.formCheckbox}
/>
handleLogin()}
title='Login'
颜色='#512DA8'
/>
);
}
导出默认登录;

在useEffect回调中使用async是非法的。不要在use effect中使用async Wait。不仅您不需要任何这些
async Wait
,但是你也不应该在那里使用
return
。@VigneshVPai我已经解决了所有这些问题,但仍然不起作用使用async for useEffect回调是非法的。不要在use effect中使用async Wait。不仅你不需要任何
async Wait
,但是您也不应该在那里使用
return
。@VigneshVPai我已经解决了所有这些问题,但仍然不起作用