J'essayais de faire this .
Il me manque quelque chose, mais je ne comprends pas pourquoi current
soit toujours null
dans cet exemple.
class App extends React.PureComponent {
constructor(props) {
super(props);
this.test = React.createRef();
}
render() {
return <div className="App">current value : {this.test.current + ""}</div>;
}
}
Vous pouvez vérifier mon cas de test ici
Parce que vous avez oublié d'attribuer le ref à un élément dom. Vous ne faites que le créer.
Écris-le comme ceci:
class App extends React.PureComponent {
constructor(props) {
super(props);
this.test = React.createRef();
}
handleClick = () => alert(this.test.current.value)
render() {
return (
<div className="App">
current value : {(this.test.current || {}).value}
<input ref={this.test} />
<button onClick={this.handleClick}>Get Value</button>
</div>
)
}
}
Vous manquez le ref={this.test}
prop.
return (
<div className="App" ref={this.test}>
current value : {this.test.current + ""}
</div>
);
React.createRef () est asynchrone. Par conséquent, si vous essayez d'accéder à la référence dans composantDidMount, il renverra null et renverra ultérieurement les propriétés du composant dans lequel vous faites référence.
componentDidMount(): void {
if (this.viewShot && this.viewShot.current) {
this.viewShot.current.capture().then((uri) => {
console.log('do something with ', uri);
});
}
}
C’est la bonne façon d’utiliser React.createRef () dans ce contexte.