Javascript React Native Hooks-以友好方式创建一个ref数组 介绍

Javascript React Native Hooks-以友好方式创建一个ref数组 介绍,javascript,reactjs,react-native,react-hooks,Javascript,Reactjs,React Native,React Hooks,我有一个数据数组,其中包含具有唯一ID的对象 我正在尝试创建尽可能多的引用。例如,如果数组有4个元素,那么我将创建4个引用。每个引用都必须包含在一个数组中,而且,我需要将它与对象的唯一id相关联 以下是我在“伪代码”中尝试做的事情: 伪码 问题 我不知道如何将每个创建的引用与其各自的对象id相关联(只是为了访问引用,比如使用字母数字索引数组,或者类似的东西) 此外,我在以这种方式创建引用时出错: React检测到%s调用的挂钩顺序发生了变化。这将导致错误和错误,如果不修复。有关更多信息,请阅读挂

我有一个数据数组,其中包含具有唯一ID的对象

我正在尝试创建尽可能多的引用。例如,如果数组有4个元素,那么我将创建4个引用。每个引用都必须包含在一个数组中,而且,我需要将它与对象的唯一id相关联

以下是我在“伪代码”中尝试做的事情:

伪码 问题 我不知道如何将每个创建的引用与其各自的对象id相关联(只是为了访问引用,比如使用字母数字索引数组,或者类似的东西)

此外,我在以这种方式创建引用时出错:

React检测到%s调用的挂钩顺序发生了变化。这将导致错误和错误,如果不修复。有关更多信息,请阅读挂钩规则:

因此,我认为这不是动态创建引用的有效形式


有什么办法吗?谢谢。

这是根据数据创建useRef的方法。长度

import { useEffect, useRef, useState } from react;

const ArrayInputs = () => {
    const inputRef = useRef([]);
    const [data, setData] = useState([]);
    
    useEffect( () => {
        let data = ['Name', 'Age', 'Gender'];
        inputRef.current = new Array(data.length);
        setData(data);
    }, []);
    
    useEffect( () => {
        //Example of using inputRef
        if(data.length !== 0) {
            inputRef.current[data.length - 1].focus();
        }
    }, [data]);
    
    return(
        <View>
            {data.map( (element, i) => <TextInput ref = {el => inputRef.current[i] = el} />)}
        </View>
    
    );

}
从react导入{useffect,useRef,useState};
常量数组输入=()=>{
常量inputRef=useRef([]);
const[data,setData]=useState([]);
useffect(()=>{
让数据=[‘姓名’、‘年龄’、‘性别’];
inputRef.current=新数组(data.length);
setData(数据);
}, []);
useffect(()=>{
//使用inputRef的示例
如果(data.length!==0){
当前[data.length-1].focus();
}
},[数据];
返回(
{data.map((元素,i)=>inputRef.current[i]=el}/>)}
);
}

这是根据data.lenght创建useRef的方法

import { useEffect, useRef, useState } from react;

const ArrayInputs = () => {
    const inputRef = useRef([]);
    const [data, setData] = useState([]);
    
    useEffect( () => {
        let data = ['Name', 'Age', 'Gender'];
        inputRef.current = new Array(data.length);
        setData(data);
    }, []);
    
    useEffect( () => {
        //Example of using inputRef
        if(data.length !== 0) {
            inputRef.current[data.length - 1].focus();
        }
    }, [data]);
    
    return(
        <View>
            {data.map( (element, i) => <TextInput ref = {el => inputRef.current[i] = el} />)}
        </View>
    
    );

}
从react导入{useffect,useRef,useState};
常量数组输入=()=>{
常量inputRef=useRef([]);
const[data,setData]=useState([]);
useffect(()=>{
让数据=[‘姓名’、‘年龄’、‘性别’];
inputRef.current=新数组(data.length);
setData(数据);
}, []);
useffect(()=>{
//使用inputRef的示例
如果(data.length!==0){
当前[data.length-1].focus();
}
},[数据];
返回(
{data.map((元素,i)=>inputRef.current[i]=el}/>)}
);
}

这里的问题是React钩子只能在功能组件的顶层调用。您正在回调函数中调用
useRef
hook,这是不允许的。您应该访问问题中的链接,了解更多关于使用挂钩的规则。这里的问题是,只能在功能组件的顶层调用React挂钩。您正在回调函数中调用
useRef
hook,这是不允许的。您应该访问问题中的链接以了解更多关于使用钩子的规则。我不太明白“我需要将它与对象的唯一id关联”的意思,但我认为您可以这样做:useffect(()=>{let data=[{id:'10i3298yfrcd',…},{id:'y48hfeucldnjs',}];let dataRef=[];for(设i=0;i{let data=[{id:“10i3298yfrcd”,…},{id:“y48hfeucldnjs”,…}];let dataRef=[];for(let i=0;i