gpt4 book ai didi

javascript - 从 JS 函数调用 React Component 函数

转载 作者:行者123 更新时间:2023-12-03 13:53:57 25 4
gpt4 key购买 nike

我有渲染 D3 树的 React 组件。代码片段如下。

componentDidMount()
{
var mountNode = ReactDom.findDOMNode(this.tree);
// Render the tree usng d3 after first component mount

if (this.props.treeData)
{
renderTree(this.props.treeData, mountNode, this.props.nodeName);//renderTree is Javascript function
}

}

contextmenu(node)
{
this.setState = {
style_popup: {
top: d3.event.clientY,
left: d3.event.clientX,
position: 'absolute'
},
render_on_click: true
}
}

render()
{
// Render a blank svg node
return (
<div id="tree">
<div id="tree-container" ref={(tree) =>
{
this.tree = tree;
}}>

</div>
{
(this.state.render_on_click) ? <PopUp popup_style={this.state.style_popup}/> : null
}
</div>
);
}

renderTree()(不是 React 函数)内,我有以下代码片段:

function renderTree(this.props.treeData, mountNode, this.props.nodeName)
{
//Some code.
.on('click',contextmenu);
}

我知道这是从Js调用React的contextmenu的错误方法,但是我该如何实现呢?我尝试使用 refs

 <D3Tree ref={instance => { this.D3tree = instance; }}  treeData={this.props.treeData} />

但是 D3Tree 组件是从不同的文件调用的,这就是我得到的原因

this.D3Tree is undefined.

我应该如何调用 contextmenu 这是一个 React 函数?

最佳答案

在您导出组件的地方,喜欢

let instance = null;

class MyComponent extends React.Component {
componentWillMount() {
instance = this;
}
componentWillUnmount() {
instance = null;
}
}

export { MyComponent, instance as myComponentInstance }

之后您将能够使用import { myComponentInstance } from "file"它将是您的组件的 this,但前提是它是一次呈现的一个实例,并且仅具有 null 检查条件。

这也不是一个正确的方法,你的代码会受到支持它的人的憎恨。

第二种方式 - 你可以在 React 组件之外的其他地方编写函数喜欢:

const myFunction = (instance, someData) => {
}

class MyComponent extends React.Component {
myFunction = (someData) => { myFunction(this, someData); }
}

无论如何,这两种方式都是反模式,但你可以实现你的目标。

关于javascript - 从 JS 函数调用 React Component 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48463327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com