Reactjs 输入组件没有';t在重新安装部件时支持React useRef挂钩
我使用钩子作为登录页面,其中文本输入在1秒后集中在组件挂载上。 下面提到的代码适用于第一次装载。如果我们在注销后返回登录屏幕,我会在1秒后收到此错误。(错误如下所述) 我的代码:(很粗糙!!希望你能理解)Reactjs 输入组件没有';t在重新安装部件时支持React useRef挂钩,reactjs,react-native,use-ref,Reactjs,React Native,Use Ref,我使用钩子作为登录页面,其中文本输入在1秒后集中在组件挂载上。 下面提到的代码适用于第一次装载。如果我们在注销后返回登录屏幕,我会在1秒后收到此错误。(错误如下所述) 我的代码:(很粗糙!!希望你能理解) import React,{useState,useRef,useffect}来自'React'; 功能登录(道具){ .................... const inputRef=useRef(null); ............................. useffec
import React,{useState,useRef,useffect}来自'React';
功能登录(道具){
....................
const inputRef=useRef(null);
.............................
useffect(()=>{
设置超时(()=>{
inputRef.current.focus();
}, 1000);
}, []);
......................
返回(
.....................
)
}
导出默认登录;
错误:
身份验证流程:
功能根导航(道具){
const loginState=useSelector(state=>state.LoginSlice.loginStatus);
const otpLoginState=useSelector(state=>state.OtpConfirmSlice.loginStatus);
返回(
{loginState | | otpLoginState?:}
);
}
为什么不在这里使用自动对焦
道具,像这样
<TextInput
ref={inputRef}
label="Enter your name"
autoFocus={true} // This will get focused it when it gets loaded.
/>
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
// Execute something here
}, 2000);
});
return unsubscribe;
}, [navigation]);
import * as React from 'react';
import { Text, View, StyleSheet, TextInput } from 'react-native';
import Constants from 'expo-constants';
function LoginScreen({ navigation }) {
const inputRef = React.useRef(null);
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
console.log('Executed After 2 seconds');
inputRef.current.focus();
// Here input will get focused after 2 seconds
}, 2000);
});
return unsubscribe;
}, [navigation]);
return (
<View style={styles.container}>
<TextInput
ref={inputRef}
placeholder="Enter your name here"
style={{ padding: 10 }}
/>
</View>
);
}
export default LoginScreen;
2秒后对焦
您可以像这样在屏幕中添加一个侦听器
<TextInput
ref={inputRef}
label="Enter your name"
autoFocus={true} // This will get focused it when it gets loaded.
/>
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
// Execute something here
}, 2000);
});
return unsubscribe;
}, [navigation]);
import * as React from 'react';
import { Text, View, StyleSheet, TextInput } from 'react-native';
import Constants from 'expo-constants';
function LoginScreen({ navigation }) {
const inputRef = React.useRef(null);
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
console.log('Executed After 2 seconds');
inputRef.current.focus();
// Here input will get focused after 2 seconds
}, 2000);
});
return unsubscribe;
}, [navigation]);
return (
<View style={styles.container}>
<TextInput
ref={inputRef}
placeholder="Enter your name here"
style={{ padding: 10 }}
/>
</View>
);
}
export default LoginScreen;
然后在登录
屏幕中,您可以这样做
<TextInput
ref={inputRef}
label="Enter your name"
autoFocus={true} // This will get focused it when it gets loaded.
/>
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
// Execute something here
}, 2000);
});
return unsubscribe;
}, [navigation]);
import * as React from 'react';
import { Text, View, StyleSheet, TextInput } from 'react-native';
import Constants from 'expo-constants';
function LoginScreen({ navigation }) {
const inputRef = React.useRef(null);
React.useEffect(() => {
const unsubscribe = navigation.addListener('focus', () => {
setTimeout(() => {
console.log('Executed After 2 seconds');
inputRef.current.focus();
// Here input will get focused after 2 seconds
}, 2000);
});
return unsubscribe;
}, [navigation]);
return (
<View style={styles.container}>
<TextInput
ref={inputRef}
placeholder="Enter your name here"
style={{ padding: 10 }}
/>
</View>
);
}
export default LoginScreen;
import*as React from'React';
从“react native”导入{Text,View,StyleSheet,TextInput};
从“expo常量”导入常量;
函数LoginScreen({navigation}){
const inputRef=React.useRef(null);
React.useffect(()=>{
const unsubscribe=navigation.addListener('focus',()=>{
设置超时(()=>{
log('2秒后执行');
inputRef.current.focus();
//此处输入将在2秒后聚焦
}, 2000);
});
退订;
},[导航];
返回(
);
}
导出默认登录屏幕;
是!!这是可行的,但安装后我需要2秒的间隔。是登录
a屏幕
?是的登录是一个完美的屏幕!。。然后,我的解决方案将为您完成这项工作。同时再次检查零食…它将在两秒钟后使输入聚焦