У меня это как родитель
class TestRef extends React.Component {
ref = React.createRef();
render() {
return <Hello ref = {this.ref} />;
}
}
и мой привет такой
export default ({ ref }) => <input ref = {ref} />;
но я всегда получал {value: null}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам следует заменить ref другим словом из-за конфликта с специальный реквизит. См. Мой отредактированный код: https://codesandbox.io/s/82m5lzy4vj
Но я рекомендую вам не передавать ref через реквизит. Вы можете создать ссылку на этот компонент и управлять им.
ref не является стандартной опорой. Вы можете изменить его на что-то другое (myRef) или использовать пересылка ссылок:
const Hello = React.forwardRef((props, ref) => <input ref = {ref} />);
Узел: ref forwarding работает с React 16.3 (не альфа) и выше.
Демо (песочница):
const Hello = React.forwardRef((props, ref) => <input ref = {ref} />);
class TestRef extends React.Component {
ref = React.createRef();
componentDidMount() {
console.info(this.ref);
this.ref.current.focus(); // example of using the ref
}
render() {
return <Hello ref = {this.ref} />;
}
}
ReactDOM.render(<TestRef />, document.getElementById("root"));<script crossorigin src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id = "root"></div>что, если ваш ввод находится в цикле, мне нужно создать динамическую ссылку? codeandbox.io/s/v037n0jvp7
Вам нужно будет создать реф для каждого из них.
только для 2 входов фокуса omg, почему бы просто не ${'.input1).focus()
Потому что это не jQuery :)
Проблема №1: Предупреждение: компонентам функции без сохранения состояния нельзя давать ссылки. Попытки получить доступ к этой ссылке потерпят неудачу.