2017-03-25 182 views
0

我已经采取了下面的代码:https://www.meteor.com/tutorials/react/adding-user-accounts
我可以代替这种特殊情况下
ReactDOM.findDOMNode(this.refs.container))
this.refs.container
没有在未来的任何隐藏的错误?在这种情况下需要ReactDOM.findDOMNode吗?

import React, { Component } from 'react'; 
import ReactDOM from 'react-dom'; 
import { Template } from 'meteor/templating'; 
import { Blaze } from 'meteor/blaze'; 

export default class AccountsUIWrapper extends Component { 
    componentDidMount() { 
    // Use Meteor Blaze to render login buttons 
    this.view = Blaze.render(Template.loginButtons, 
     ReactDOM.findDOMNode(this.refs.container)); 
    } 
    componentWillUnmount() { 
    // Clean up Blaze view 
    Blaze.remove(this.view); 
    } 
    render() { 
    // Just render a placeholder container that will be filled in 
    return <span ref="container" />; 
    } 
} 

,或者甚至改变使用回调函数:

.... 
export default class AccountsUIWrapper extends Component { 
    componentDidMount() { 
    // Use Meteor Blaze to render login buttons 
    this.view = Blaze.render(Template.loginButtons, 
     this.container); 
    } 
    .... 
    render() { 
    // Just render a placeholder container that will be filled in 
    return <span ref={(node) => (this.container = node) />; 
    } 
} 

回答

0

由于建议的反应,裁判文档

如果你反应过来的工作,你可能熟悉的旧 其中ref属性是字符串的API,如“textInput”,并且DOM将作为this.refs.textInput访问DOM节点。我们建议不要这样做,因为 字符串参考文献有一些问题,被视为遗留问题,并且可能会在将来的某个版本中删除 。如果您目前使用 this.refs.textInput访问参考,我们建议您使用回调模式 。

因此ref callback是去,如果你想有未来支持

export default class AccountsUIWrapper extends Component { 
    componentDidMount() { 

    this.view = Blaze.render(Template.loginButtons, 
     this.container); 
    } 
    .... 
    render() { 

    return <span ref={(node) => (this.container = node) />; 
    } 
} 
+0

什么* ReactDOM.findDOMNode *的正确方法?在这种情况下忽略它是否安全? –

+0

是的,因为你仍然在使用字符串参考。 Ref回调是最好的和建议的方式 –

相关问题