reactjs - 如何为函数组件创建 ref
问题描述
如何为两个 getAllNumbers() 函数组件创建父引用?
<View>{this.getAllNumbers()}</View>
<View>{this.getAllNumbers()}</View>
getAllNumbers() {
let itemArr = [];
for (let i = 0; i < numberArray.length; i++) {
itemArr.push(
<NumberView
ref={"NumberView" + numberArray[i]}
key={`rowA${i}`}
/>
);
}
return itemArr;
}
解决方案
您可以利用函数回调为 NumberView 组件创建引用
constructor() {
super()
this.numberViewRefs = {};
}
...
getAllNumbers() {
var itemArr = [];
for (let i = 0; i < numberArray.length; i++) {
itemArr.push(
<NumberView
ref={(ref) => this.numberViewRefs[i] = ref}
key={`rowA${i}`}
/>
);
}
return itemArr;
}
当您希望访问它们时,您可以使用索引从 numberViewRef 对象访问它们。
例如: this.numberViewRef[i]
由于您调用 getAllNumbers 两次,因此您需要在 ref 前面加上一个键。也许
<View>{this.getAllNumbers("first")}</View>
<View>{this.getAllNumbers("second")}</View>
接着
getAllNumbers(key) {
var itemArr = [];
for (let i = 0; i < numberArray.length; i++) {
itemArr.push(
<NumberView
ref={(ref) => this.numberViewRefs[`${key}${i}`] = ref}
key={`rowA${i}`}
/>
);
}
return itemArr;
}
并参考它
this.numberViewRefs[
${key}${i}]
或this.numberViewRefs[
第一个${i}]
推荐阅读
- google-sheets - 在“SUMIF”中沿总和范围广播的标准范围
- javascript - 以下 Ramda/函数编程模式是否遵循约定/最佳实践?
- python - Django:列出和显示数据库中的数据
- ruby-on-rails - 未定义的方法“评论”#
- kubernetes - 如何找出我应该将“scc”添加到哪个“用户”?
- ruby - 如何在 ruby datamapper 中设置一个属性,该属性是同一对象的另一个属性的函数?
- sql - 根据请求(未加载)触发行源(传递)查询
- python-3.x - Flask SQLAlchemy:像二进制方法
- javascript - 如何使用javascript从动态创建的html元素中获取输入数据
- wordpress - 如何从 Discord 的预览中删除作者标签?