Я пишу код в CoffeeScript, так как я писал об этом.
Вот основная структура.ReactJS: Как получить доступ к реквизитам дочернего компонента?
{ div, input } = React.DOM
Outer = React.createClass
render: ->
div { id: 'myApp' },
Inner()
Inner = React.createClass
render: ->
input { id: 'myInput', ref: 'myInput' }
У меня есть toggle
метод на мой внешний класс, который срабатывает при нажатии клавиш. Он переключает видимость моего приложения.
Когда мое приложение переключается с скрытого на показанный, я хочу сосредоточиться на вводе.
Теперь методы тумблеры выглядят более или менее так:
Outer = React.createClass
render: ->
......
hide: ->
@setState { visible: no }
show: ->
@setState { visible: yes }
$('#myInput').focus() # jQuery
# I want to do something like
# @refs.myInput.getDOMNode().focus()
# But @refs here is empty, it doesn't contain the refs in Inner
toggle: ->
if @state.visible
@hide()
else
@show()
Как мне это сделать тогда?
AutoFocus не работает для меня. На самом деле я просто подумал о 'componentDidUpdate' и попробовал нечто похожее на то, что вы предложили, и это сработало. Но я действительно хочу знать, есть ли простой способ доступа к реквизитам дочерних компонентов. Пример refs в React Doc вводит ввод в верхний компонент, но на самом деле входы обычно вложены в подкомпоненты. – octref
Refs могут использоваться только в компоненте, где они определены. Если бы они были доступны любому дочернему компоненту, вы должны были бы предположить, что ваше имя для ссылки не будет конфликтовать с любым другим ref. Вам также нужно будет проверить каждый другой компонент, если вы хотите удалить ссылку или изменить ее. Эти предположения и смотреть повсюду лучше избегать. – FakeRainBrigand