2017-02-16 72 views
2

可以从外部调用反应组件吗? 例如来自外部的呼叫反应组件

HTML

<div id='react-app'></div> 

<button onClick=callReactModal()>PressME</button> 

我的分量,我想调用方法

let callReactModal = function() { 
    console.log('clicked'); 
    //Navigation.sayHello(); 
} 

class Navigation extends React.Component<any, any> { 

    constructor(props:any){ 
    super(props); 

    this.state = { 
     language: { 
     lang: cookie.load('lang') || '' 
     } 
    }; 
    this.click = this.click.bind(this); 
    } 

    sayHello =() => { 
    alert("Hello"); 
    } 
} 

我不得不从另一个组件调用模态,但我不知道如何实现那。

试图调用方法,更新state类和获取Warning: setState(...): Can only update a mounted or mounting component.它需要开放模式(使用语义UI),它采用了先进

handleOpen = (e) => this.setState({ 
     modalOpen: true, 
    }) 

modalPart

方法

<Modal size='small' open={this.state.modalOpen} onClose={this.handleClose} trigger={<a className="btn btn-base" onClick={this.handleOpen}>Login</a>} closeIcon='close'> 

感谢帮帮我!

+0

你需要定义sayHello'静态',但问题是为什么? – juancab

+0

告诉我'未捕获的ReferenceError:callReactModal没有被定义' –

+0

看在这[[fiddle](https://jsfiddle.net/odzck2a3/) – juancab

回答

3

虽然不是最佳实践。你必须设置callReactModal功能窗口

window.callReactModal = function() { 
    console.log('clicked'); 
    //Navigation.sayHello(); 
} 

来实现它更好的方法,是创建一个触发时打开模态事件侦听器。

+0

这是正确的,但像Hoyen说的,你可能不应该这样做。如果可能,最好将所有内容都放在反应组件内。 – ShaneDaugherty

+0

或创建一个组件与模态 – juancab

+0

认为这是不好的做法 但它是这样使用它的基本要求 谢谢你们! –

0

不,这是不可能的。所有的“自定义标签”(React组件)都应该位于您的JSX内部。但是,如果你愿意,你可以在每页上渲染多个React应用程序:

<div id='react-app'></div>  
<div id='react-button'></div> 
+0

有可能,可以通过附加到窗口或在里面编码标签与浏览器中的babel transpiler,虽然不是一种好的做法 – juancab

+0

知己:) –