【发布时间】:2017-04-22 07:58:51
【问题描述】:
我有以下代码:
const priceCalculator = ReactDOM.render(<PriceCalculator />, reactHolder);
我需要稍后在我的代码中使用priceCalculator,但 ESLint 抱怨我不应该使用ReactDOM.render() 的返回值。那时我发现您可以将pass a 3rd argument 转为ReactDOM.render(),这是一个回调。太好了,我想...
ReactDOM.render(<PriceCalculator />, reactHolder, function(priceCalculator) {
// do something with priceCalculator
});
但是priceCalculator 是未定义的。在调试器中,我暂停了异常,发现this 在我在这个函数中时被设置为我的 React 组件。所以我重写它...
ReactDOM.render(<PriceCalculator />, reactHolder, function() {
const priceCalculator = this;
// do something with priceCalculator
});
它仍然未定义。怎么回事?
我正在使用 Webpack 编译 es6 React 代码(使用 babel)。
【问题讨论】:
-
ReactDOM.render将给定的组件渲染到给定的 DOM 元素中。我相信回调是在渲染完成时调用的。也许你想要的只是做const priceCalculator = <PriceCalculator />? -
@sdgluck 这就是我首先做的,它工作正常。但是不鼓励这种方式,因为最终 ReactDOM.render 可能不会返回任何东西github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/…
-
回调似乎在小提琴中正常工作:jsfiddle.net/69z2wepo/64439
-
@sdgluck 我看错了你的答案......没有注意到你没有使用渲染。我需要引用我的组件的特定实例,因为我将侦听器附加到现有(非反应)DOM 节点。这些监听器需要调用我的组件实例的方法。
标签: reactjs webpack ecmascript-6 babeljs react-dom