2017-03-25 183 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回調是最好的和建議的方式 –

相關問題