gpt4 book ai didi

javascript - 如何在回调中从 React 组件访问 "this"

转载 作者:行者123 更新时间:2023-11-28 05:05:18 25 4
gpt4 key购买 nike

我有一个使用 Dygraphs 渲染图表的 React 组件。我想在单击该系列的标签时隐藏该系列。

createGraph() {
this.g = new Dygraph(
this.refs.graphdiv,
this.state.options.data,
{
strokeWidth: 1,
labels: this.state.options.labels,
drawPoints:true,
stepPlot: true,
xlabel: 'Time',
ylabel: 'Metric value',
legend: 'always',
connectSeparatedPoints: true,
series: this.state.options.series,
labelsDiv: "labels",
legendFormatter: this.legendFormatter
}
);
}

render() {
return (
<div>
<h2>Time series for system {this.props.sysId.replace(/_/g, ':')}</h2>
<h3>{this.props.date}</h3>
<div id="graphdiv" ref="graphdiv" style={{width: window.innerWidth - 50, height: window.innerHeight - 200}}></div>
<p></p>
<div id="labels"></div>
</div>
);
}

为此,我实现了 dygraphs 回调“legendFormatter”并使用 onClick 回调创建标签:

legendFormatter(data) {
if (data.x == null) {
// This happens when there's no selection and {legend: 'always'} is set.

let f = () => {
data.dygraph.setVisibility(0, false);
data.dygraph.updateOptions({})
}

// return '<br>' + data.series.map( (series) => {
// return series.dashHTML + ' ' + "<label onclick='f();'>" + series.labelHTML + "</label>"
// }, this).join('<br>');

let x = data.dygraph;

return '<br>' + data.series[0].dashHTML + ' ' + "<label onclick='console.log(x);'>" + data.series[0].labelHTML + "</label>"
}

问题是我无法从 React 访问“this”,也无法访问 legendFormatter 函数中的变量:

f() is undefined

x is undefined

如何将上下文绑定(bind)到 onClick 函数?

最佳答案

您可以添加一个构造函数并将 this 绑定(bind)到 legendFormatter:

constructor() {
super();
this.legendFormatter = this.legendFormatter.bind(this);
}

或者您可以将 legendFormatter 函数改为属性初始化箭头函数:

legendFormatter = (data) => {
// ...
};

关于javascript - 如何在回调中从 React 组件访问 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802425/

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