reactjs - 使用 console.log 时 React Hook 不返回任何内容
问题描述
我正在使用 redux 挂钩来存储一些数据以与互联网上的一些 json 文件进行比较,但不知何故,当我记录这些值时它没有显示,如下所示
我在这里使用这些值
错误
它显示来自 json 的数据而不是来自钩子的数据,发生了什么?我想怎么做才能显示钩子数据并正确比较它们,非常感谢
这是代码 https://snack.expo.io/@quockhanh210199/upbeat-ramen (奇怪的问题发生所以它不能运行,但这里是代码)
function LoginScreen({navigation}) {
// set timeout ID for setTimeOut()
const timeIdRef = React.useRef(null);
const dispatch = useDispatch();
const [username, getUsername] = useState('');
const [password, getPassword] = useState('')
// handleInput = (e) => {
// getUserInfo(e.target.value);
// };
// mock user from fake api
useEffect(() => {
dispatch(getUser());
}, [dispatch]);
//dispatch(GetUserInfo(username, password));
// const handlegetdata= ({user,password})=>{
// dispatch(GetUserInfo(user,password))
// // }
// console.log(handleGetdata.user)
const user = useSelector((state) => {
return state.User.user;
});
function getAuth(){
console.log('User from local '+ username)
console.log('User from Json '+user.username)
}
useEffect(() => {
return () => {
if (timeIdRef.current) {
// make sure this is always cleared in case clearTo is never called
clearTimeout(timeIdRef.current);
}
};
}, [timeIdRef]);
// console.log();
const Login = useSelector((state) => {
return state.LoginAction.loginStatus;
});
// console.log(Login)
// const initModal = false;
// eslint-disable-next-line require-jsdoc
function handleLogin() {
dispatch({type: 'changeLogin'});
}
function handlDefault() {
dispatch({type: 'getDefault'});
}
// not show??
// console.log(username);
// console.log('Login ' + Login)
// const [show, doShow] = useState(initModal);
// const [visible, UpdateView] = useState(false)
// Show modal dialog
// function ChangeModalValue() {
// console.log(show);
// doShow(!show);
// }
// setTimer after Model Appear
function SetTimer() {
handleLogin();
if (timeIdRef.current) {
// clear any previous timeIdRef to avoid multiple button click activate multiple setTimeout
clearTimeout(timeIdRef.current);
}
const timeID = setTimeout(() => {
navigation.navigate('Home');
}, 3000);
timeIdRef.current = timeID;
}
function clearTO() {
clearTimeout(timeIdRef.current);
timeIdRef.current = null;
handlDefault();
}
// make text black when check complete
function getTextStyle(isValid) {
if (isValid) {
return {
color: 'black',
};
}
return {
color: 'grey',
};
}
// function getLoginText() {
// return <CirclesLoader />;
// }
// function hideText(visible){
// if(isDisabler)
// }
const loginValidationSchema = Yup.object().shape({
email: Yup.string().email('Please enter valid email').required('Email Address is Required'),
password: Yup.string()
.min(8, ({min}) => `Password must be at least ${min} characters`)
.required('Password is required'),
});
return (
<View style={styles.ViewStyle}>
<Text style={{fontSize: 40}}>Login To System</Text>
<Formik
validateOnMount
validationSchema={loginValidationSchema}
initialValues={{email: '', password: ''}}
onSubmit={value => {
getUsername(value.email)
getPassword(value.password)
getAuth() ///console log but return nothing
SetTimer()
}}
// () => navigation.navigate('Login')
>
{({handleChange, handleBlur, handleSubmit, values, errors, touched, isValid}) => (
<View>
<TextInput
name="email"
placeholder="Email Address"
style={styles.TextInputForm}
onChangeText={handleChange('email')}
onBlur={handleBlur('email')}
value={values.email}
keyboardType="email-address"
/>
{errors.email && touched.email && <Text style={styles.errorText}>{errors.email}</Text>}
<TextInput
name="password"
placeholder="Password"
onChangeText={handleChange('password')}
onBlur={handleBlur('password')}
value={values.password}
secureTextEntry
style={styles.TextInputForm}
/>
{errors.password && touched.password && (
<Text style={styles.errorText}>{errors.password}</Text>
)}
<TouchableOpacity
onPress={handleSubmit}
style={styles.ButtonLogin}
disabled={!isValid || values.email === ''}>
{/* <CirclesLoader size={20} dotRadius={7} /> */}
<Text style={getTextStyle(isValid)}>Login</Text>
</TouchableOpacity>
<View>
<Modal transparent visible={Login}>
<View
style={{
backgroundColor: '#000000',
flex: 1,
justifyContent: 'center',
alignContent: 'center',
}}>
<View style={styles.ModalStyle}>
<CirclesLoader />
<TextLoader
textStyle={{
fontSize: 25,
marginTop: 20,
}}
text="Logging you in"
/>
<TouchableOpacity onPress={clearTO} style={styles.ButtonBack}>
<Text>Go back</Text>
</TouchableOpacity>
</View>
</View>
</Modal>
</View>
</View>
)}
</Formik>
</View>
);
}
请帮忙,非常感谢
解决方案
推荐阅读
- ruby-on-rails - Friendly_id slug_history 正在更新错误的 slug
- raspberry-pi - 更改 Watson IoT 输入节点连接为网关时,Raspberry Pi 上的 Node-RED 不断重启
- r - 将结果作为向量 (r) 存储在 for 循环中
- reactjs - 如何在 React Native 中包装 Flatlist 项目
- r - 在面板数据帧 R 中生成一个虚拟对象
- elasticsearch - 在前端搜索操作时获取数据计数
- mysql - 如何删除 MySQL Query 中未使用的重新编码的行
- flask - Flask Admin:将相关对象的属性添加到模型视图中的列列表
- regex - 逗号分隔列表的正则表达式
- sql - 使用 vb.net 在 sql db 中调用列的最大值