Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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
Javascript 数组映射反应组件调用子函数_Javascript_Arrays_Reactjs - Fatal编程技术网

Javascript 数组映射反应组件调用子函数

Javascript 数组映射反应组件调用子函数,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,如果我们在react中使用数组映射,如何调用子函数?我发现了一种使用refs进行谷歌搜索的方法,但它不调用实际组件,而是调用它注册的最后一个组件 Index.jsx 谢谢@Mayank Shukla 从他的解决方案中得到启发,并根据 如果有人想用的话,我已经想出了一个解决办法 Index.jsx 因为您正在为所有子组件分配相同的ref(ref名称),所以在循环结束时,ref将具有最后一个子组件的引用 解决方案是,为每个子元素使用ref的唯一名称,实现这一点的一种方法是,将元素的索引与ref放在一

如果我们在react中使用数组映射,如何调用子函数?我发现了一种使用refs进行谷歌搜索的方法,但它不调用实际组件,而是调用它注册的最后一个组件

Index.jsx

谢谢@Mayank Shukla

从他的解决方案中得到启发,并根据 如果有人想用的话,我已经想出了一个解决办法

Index.jsx


因为您正在为所有子组件分配相同的ref(ref名称),所以在循环结束时,ref将具有最后一个子组件的引用

解决方案是,为每个子元素使用ref的唯一名称,实现这一点的一种方法是,将元素的索引与ref放在一起

像这样:

this.state.users.map((user, index) => <ChatEditor ref={`chateditor${index}`} />)
this.state.users.map((user, index) => 
     <ChatEditor ref={el => (this[`chateditor${index}`] = el)} />)
访问特定的子元素


建议,根据

如果您以前与React合作过,您可能会熟悉一位年长的 API,其中ref属性是字符串,如“textInput”,DOM 节点作为this.refs.textInput访问。我们建议不要这样做,因为 字符串引用有一些问题,被认为是遗留的,并且很可能 将在将来的某个版本中删除。如果您当前正在使用 this.refs.textInput要访问refs,建议使用回调模式 相反

所以使用ref回调方法而不是字符串refs

像这样:

this.state.users.map((user, index) => <ChatEditor ref={`chateditor${index}`} />)
this.state.users.map((user, index) => 
     <ChatEditor ref={el => (this[`chateditor${index}`] = el)} />)

有趣的是,您根据旧的api显示了代码,但写了一条警告,指出应该使用回调(不添加代码)呵呵,您希望我也为此编写代码:P,将这样做:)
this.state.users.map((user, index) => <ChatEditor ref={`chateditor${index}`} />)
this.refs[`chateditor${index}`]     //replace index with 0,1,2...
this.state.users.map((user, index) => 
     <ChatEditor ref={el => (this[`chateditor${index}`] = el)} />)
this[`chateditor${index}`]          //replace index with 0,1,2...