gpt4 book ai didi

javascript - 动态 react 状态

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

我目前正在学习 React,我想用我的 WebSockets 连接实现一个动态系统。所以我做了一个基本的事件监听系统。这是我的代码:

class UIEvents {
constructor() {
this.Events = {};
}

BindEvent(name, cb) {
if(!this.Events[name]) {
this.Events[name] = [];
}

this.Events[name].push(cb);
}

CallEvent(name, value) {
if(!this.Events[name]) {
return console.error("Event is not registred");
}

for(var cb of this.Events[name]) {
cb(value);
}
}
}

var EventManager = new UIEvents();

class Welcome extends React.Component {
constructor() {
super();
EventManager.BindEvent("name", this.onName)
}

getInitialState = () => {
return {
name: "Haha"
}
}

onName = (name) => {
console.log("Replace??", name)
this.setState({
name: name
})
}

render() {
return <h1>Hello, {this.state.name}</h1>;
}
}

function App() {
return (
<div>
<Welcome />
<Welcome />
<Welcome />
</div>
);
}

ReactDOM.render(
<App />,
document.getElementById('root')
);

EventManager.CallEvent("name", "Michel")

但是,我有这个错误

pen.js:54 Uncaught TypeError: Cannot read property 'name' of null
at Welcome.render (pen.js:54)
at p._renderValidatedComponentWithoutOwnerOrContext (react.min.js:13)
at p._renderValidatedComponent (react.min.js:13)
at performInitialMount (react.min.js:13)
at p.mountComponent (react.min.js:13)
at Object.mountComponent (react.min.js:15)
at h.mountChildren (react.min.js:14)
at h._createInitialChildren (react.min.js:13)
at h.mountComponent (react.min.js:13)
at Object.mountComponent (react.min.js:15)

这段代码应该是我不明白出了什么问题。

Codepen demo

最佳答案

如果React组件基于ES6类,则应在构造函数中设置初始状态。

constructor() {
super();
EventManager.BindEvent("name", this.onName);
this.state = { name: 'Haha' };
}

关于javascript - 动态 react 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44611397/

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