Ich bin vielleicht zu spät zur Party gekommen, aber ich habe versucht, dynamische Refs auf die richtige Weise in mein Projekt zu implementieren, und alle Antworten, die ich bis dahin gefunden habe, sind nicht ganz zufriedenstellend für meinen Geschmack. Deshalb habe ich eine Lösung gefunden, die ich für richtig halte einfach und verwendet die native und empfohlene Reaktionsweise, um die Referenz zu erstellen.
Manchmal stellen Sie fest, dass die Art und Weise, wie die Dokumentation geschrieben wird, davon ausgeht, dass Sie über eine bekannte Anzahl von Ansichten verfügen. In den meisten Fällen ist diese Anzahl unbekannt. In diesem Fall benötigen Sie eine Möglichkeit, das Problem zu lösen. Erstellen Sie dynamische Verweise auf die unbekannte Anzahl von Ansichten, die Sie benötigen in der Klasse zu zeigen
Die einfachste Lösung, die ich mir vorstellen konnte und die einwandfrei funktionierte, war Folgendes
class YourClass extends component {
state={
foo:"bar",
dynamicViews:[],
myData:[] //get some data from the web
}
inputRef = React.createRef()
componentDidMount(){
this.createViews()
}
createViews = ()=>{
const trs=[]
for (let i = 1; i < this.state.myData.lenght; i++) {
let ref =`myrefRow ${i}`
this[ref]= React.createRef()
const row = (
<tr ref={this[ref]}>
<td>
`myRow ${i}`
</td>
</tr>
)
trs.push(row)
}
this.setState({dynamicViews:trs})
}
clickHandler = ()=>{
//const scrollToView = this.inputRef.current.value
//That to select the value of the inputbox bt for demostrate the //example
value=`myrefRow ${30}`
this[value].current.scrollIntoView({ behavior: "smooth", block: "start" });
}
render(){
return(
<div style={{display:"flex", flexDirection:"column"}}>
<Button onClick={this.clickHandler}> Search</Button>
<input ref={this.inputRef}/>
<table>
<tbody>
{this.state.dynamicViews}
<tbody>
<table>
</div>
)
}
}
export default YourClass
Auf diese Weise wechselt die Schriftrolle zu der gewünschten Zeile.
Prost und hoffe, es hilft anderen