Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 输入组件没有';t在重新安装部件时支持React useRef挂钩_Reactjs_React Native_Use Ref - Fatal编程技术网

Reactjs 输入组件没有';t在重新安装部件时支持React useRef挂钩

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

我使用钩子作为登录页面,其中文本输入在1秒后集中在组件挂载上。 下面提到的代码适用于第一次装载。如果我们在注销后返回登录屏幕,我会在1秒后收到此错误。(错误如下所述)

我的代码:(很粗糙!!希望你能理解)

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
屏幕
?是的登录是一个完美的屏幕!。。然后,我的解决方案将为您完成这项工作。同时再次检查零食…它将在两秒钟后使输入聚焦