【问题标题】:React, update state on an event from a third party control反应,更新来自第三方控件的事件状态
【发布时间】:2017-02-08 19:49:13
【问题描述】:

我有一个反应组件InfoPanel,我想更新单击第三方控件gantt chart 时的状态。我只使用通量完成此操作,以允许组件相互通信。当第三方控制事件onTaskClickfires时,我不确定如何更改InfoPanel组件的状态。

这是为第三方控件触发的事件。

class InfoPanelService {
    constructor() {
        this.InitInfoPanel();

    }

    OnTaskClick() {
        //event from a third party control
        gantt.attachEvent("onTaskClick", function (id, e) {
            var tasks = gantt.getTaskByTime();
            var task = tasks[id];

            //determine the task type and get the data

            return true;
        });
    }
    InitInfoPanel() {
        this.OnTaskClick();
    }
}

这是我的InfoPanel 组件

var InfoPanel = React.createClass({
    getInitialState: function () {
        return { data: {
            project: {},
            subProject: {},
            activity: {}
        } };
    },

    render: function() {
        return (<div>
                    ...tables with the state values
                    ... too long to post
               </div>

          );
    }

});

我应该在我的组件中添加这样的东西吗? &lt;InfoPanel OnTaskClick = infoPanelService.OnTaskClick /> 而不是立即在构造函数内部附加事件并将该函数作为道具从服务中传递?这样组件就完全傻了,我可以很容易地扔掉它并重用它。

onResourceSelect() {
    this.props.OnTaskClick();
},

【问题讨论】:

  • @JustinM.Ucar 我不明白这对我有什么帮助。该事件是从第三方控件而不是我的父母触发的。我需要在它触发时收到通知,然后在我的组件内部更改状态。我无法将其附加到 DOM element

标签: javascript .net reactjs reactjs.net


【解决方案1】:

我的建议是等到组件安装完毕再像这样继续,因为它是自定义/第 3 方触发的事件:

componentDidMount() {
    //component is mounted/inserted to DOM, 
    // Attach your 3td party/custom event listener
    this.getDOMNode().addEventListener("onTaskClick", ()=>{/*handle it here*/});
  }

【讨论】:

  • 谢谢,我希望避免这种情况,但使用老派的反应有点让人头疼。
猜你喜欢
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2020-11-26
相关资源
最近更新 更多