【发布时间】:2016-01-20 05:37:30
【问题描述】:
所以我正在阅读这里描述的文献:
https://facebook.github.io/react/docs/more-about-refs.html
我一般理解 refs 如何使用它来访问 DOM。但是当它谈到回调时,我真的很困惑。
总而言之,它说(我在这里解释)“回调函数在安装组件时被调用..它使用引用的组件传递给渲染中回调的参数”。我对此感到非常困惑。
所以在他们的例子中:
render: function() {
return (
<TextInput
ref={function(input) {
if (input != null) {
input.focus();
}
}} />
);
},
那么当“输入”被调用时,它的值是多少。是否是以下的反应组件:
<TextInput />
我还假设它实际上是一个包装器:
<input type="text" />
否则 focus() 将无法正常工作?
我的下一个问题是,ComponentDidMount 生命周期是在渲染生命周期的 ref 中提到的回调之前执行还是之后执行?
因为然后我看到了这个例子(它看起来与非 es6 标准完全不同......它让我失望)
render: function() {
return <TextInput ref={(c) => this._input = c} />;
},
componentDidMount: function() {
this._input.focus();
},
也就是说,如果您不使用 ES6,则逻辑(即 input.focus())将在渲染生命周期中找到的回调中找到。但是,如果您使用的是 ES6,则将该逻辑移至 componentDidMount 生命周期。
所以我正在考虑使用 ES6 标准,首先调用回调,将引用的组件(我假设是 TextInput)设置为一个名为“_input”的新别名,稍后在 componentDidMount 中识别和使用,即使它没有在其他任何地方声明。
我在这一切中正确吗?
还有一个问题,如果我使用的是非 ES6 标准,我将如何完成让 componentDidMount 执行 ES6 示例中描述的逻辑的相同任务?就像我要这样做..
render: function() {
return (
<TextInput
ref={function(c) {
this._input = c;
}} />
);
},
componentDidMount: function() {
this._input.focus();
},
还是我错了?
【问题讨论】: