gpt4 book ai didi

javascript - 将 vanilla JS 对象作为 prop 传递给子组件

转载 作者:行者123 更新时间:2023-11-30 14:26:27 25 4
gpt4 key购买 nike

我编写了一个名为 message.js 的类来模拟进入我的应用程序的消息

在 message.js 中,我定义了两个类; Message 类和另一个名为 EventEmit 的类。我的 Message 类有一个渲染函数,需要能够将 EventEmit 对象作为 prop 传递给子组件。

在子组件 (main.js) 中,我尝试通过以下方式访问 EventEmit 对象:

    let eventemitter = this.props.eventemitter;
eventemitter.on('someeventstring', somecallback());

调试时,如果我停在上面提到的第二行,我可以输入“eventemitter”,我会返回一个对象,我可以看到 .on() 方法。

但是,当该行执行时,我在控制台中收到“eventemitter.on”不是函数错误。任何建议将不胜感激。

下面的代码

消息.js

export class Message extends React.Component{

constructor(props) {
super(props);
this.state = {
...
}
}

render() {
return (
<Index eventemitter = {EventEmitter} />
);
}
}
export class EventEmitter {
constructor() {
this.events = {};
this.on = this.on.bind(this);
this.removeListener = this.removeListener.bind(this);
this.emit = this.emit.bind(this);
}
on = (event, listener) => {
if (typeof this.events[event] !== 'object') {
this.events[event] = [];
}
this.events[event].push(listener);
return () => this.removeListener(event, listener);
}
removeListener = (event, listener) => {
if (typeof this.events[event] === 'object') {
const idx = this.events[event].indexOf(listener);
if (idx > -1) {
this.events[event].splice(idx, 1);
}
}
}
emit = (event, ...args) => {
if (typeof this.events[event] === 'object') {
this.events[event].forEach(listener => listener.apply(this, args));
}
}

索引.js

componentDidMount() {

let eventemitter = this.props.eventemitter;
eventemitter.on('someeventstring', somecallback()); //<--Problem line

}

最佳答案

为了调用调用方法on()您需要实例化该类。尝试:

<Index eventemitter={new EventEmitter()} />

关于javascript - 将 vanilla JS 对象作为 prop 传递给子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51865583/

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