reactjs - 除了 React.js 中的 undefined 之外,我无法让状态返回
问题描述
export default class GameControls
extends React.Componentconstructor(props) {
super(props);
this.state = {
x: 0,
y: 0
};
绑定按钮功能
this.left = this.left.bind(this);
this.right = this.right.bind(this);
this.up = this.up.bind(this);
this.down = this.down.bind(this);
}
按钮的功能
left = event => {
this.setState({ x: -1, y: 0 });
alert(this.state.value);
};
right = event => {
this.setState({ x: 1, y: 0 });
alert(this.state.value);
};
up = event => {
this.setState({ x: 0, y: 1 });
alert(this.state.value);
};
down = event => {
this.setState({ x: 0, y: -1 });
alert(this.state.value);
};
渲染按钮
render() {
return (
<div>
<h2 className="Sub-heading">Controls:</h2>
<button className="left">
{
<img
src={leftArrow}
className="img-fluid"
alt="left"
onClick={this.left}
/>
}
</button>
<button className="up">
{
<img
src={upArrow}
className="img-fluid"
alt="up"
onClick={this.up}
/>
}
</button>
<button className="down">
{
<img
src={downArrow}
className="img-fluid"
alt="Down"
onClick={this.down}
/>
}
</button>
<button className="right">
{
<img
src={rightArrow}
className="img-fluid"
alt="right"
onClick={this.right}
/>
}
</button>
</div>
);
}
}
我正在尝试更改状态,以便可以将它们发送到 firebase 并在网格上传达玩家的运动,但是我一直返回未定义并且不知道如何修复它。
我尝试了几种方法来改变状态,但仍然没有运气。
解决方案
setState 是异步的。因此,您不能在进行更改后立即引用状态更改。它接受一个回调作为参数,当它完成时将被执行。
你想要这样的东西:
this.setState({ x: 0, y: -1 }, () => {
alert(this.state.x)
});
推荐阅读
- ios - 视频不在 AVPlayer 或 safari 中播放,但在 chrome 中播放
- python - (PythonCrashCourse) 外星人入侵高分
- xml-parsing - Liquibase“在xml changeLog文件中找不到元素'databaseChangeLog'的声明”
- node.js - 在 node.js 中将字符串转换为 64 位浮点数
- ios - 将 JSON 请求循环到后端(REST API)
- minizinc - 基于约束最大化
- google-cloud-platform - 在 GCP 中创建没有公共 IP 的虚拟机
- node.js - 我存储在 s3 中的对象在访问 url 时会自动下载
- tomcat - URL 中的两个连续点将 URL 导航向后移动一步
- javascript - 为什么 jQuery 验证显示单词“false”而不是我的自定义消息?