Reactjs React-Native假定组件Willmount在React-hooks版本中不工作
您好,我正在react native中构建一个登录屏幕,我想创建一个记住信息,但如果我更改了屏幕,则该信息仍然存在。如果复选框为false,我将使用secure store访问存储 我在互联网上搜索过,解决方法是让一个组件在渲染完所有内容后挂载,但假设使用中的组件不起作用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
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我已经解决了所有这些问题,但仍然不起作用