javascript - React-我应该使用 promise 来设置状态吗?

标签 javascript reactjs scope

我正在尝试 js + React,但遇到了意外的行为:

在下面的示例中,虽然一开始似乎工作正常,但当 (this.state.progress.length%3==0) 按预期进行时,我没有得到分数变化。 p>

进度字符串似乎更新得很好,但分数每四次点击更新一次...

编辑:我应该查明问题的根源,因为人们都很忙,问题出在 handleClick()<子组件上的/code> 与同一组件中的 scoreUpdate() 进行交互(调用)。不过,我认为解决方案并不简单,因为问题末尾的 consol.log() 示例有效。

我组织代码的方式显然存在问题,但是什么?

我应该使用Promises来调用我的scoreUpdate()函数吗?

或者有更好的方法来解决这个问题吗?

子组件:

import React from 'react';

export class Child extends React.Component {

constructor(props) {
super(props);

this.state = { progress: "0",
               score: 0};
this.handleClick = this.handleClick.bind(this);
this.scoreUpdate = this.scoreUpdate.bind(this);
}

handleClick(e) {

let previous = this.state.progress;

let score = Number(e.currentTarget.id);

this.setState({progress: previous+e.currentTarget.id});

this.scoreUpdate(score);

}  

scoreUpdate(score) {


if (this.state.progress.length%3==0) {

let previous = this.state.score;

this.setState({score: previous+score}); }

}

render() {


return (
  <div>
    <ul>
      <li id="1" onClick={this.handleClick}>a</li>
      <li id="2" onClick={this.handleClick}>b</li>
    </ul>

    <p>progress</p>
    <p>{this.state.progress}</p>
    <p>progress length</p>
    <p>{this.state.progress.length}</p>
    <p>score</p>
    <p>{this.state.score}</p>
  </div>
);
}
}

父组件:

import React from 'react';
import ReactDOM from 'react-dom';
import {Child} from './components/Child';

class Parent extends React.Component {  

render() {

return (
  <Child />
);
}
}

ReactDOM.render(
<Parent />,
document.getElementById('app')
);

任何关于为什么会发生这种情况的有效见解/解释都将受到高度赞赏。让我困惑的是,当我在控制台中输入:

var b = 1;

function c() {
b=b+2;
d();
}

function d() {
console.log(b);
 }

c();

这将按预期返回 3。

如果您知道此问题有重复,请发表评论,以便我将其删除。

最佳答案

尝试这样:

handleClick(e) {

    let previous = this.state.progress;

    let score = Number(e.currentTarget.id);

    this.setState({progress: previous+e.currentTarget.id}, () => this.scoreUpdate(score));

}  

scoreUpdate(score) {


    if (this.state.progress.length%3==0) {

    let previous = this.state.score;

    this.setState({score: previous+score}); }

}

关于javascript - React-我应该使用 promise 来设置状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45447753/

相关文章:

javascript - 尝试使用 Formik 进行多步骤验证。如何验证字段?

javascript - fork 并拉动 React-Router

reactjs - react 钩子(Hook)和 Prop 的命名约定?

javascript - 具有嵌套范围的 Angular,尝试使用 $parent 但 watch 仍然没有更新

scope - 未捕获闭包范围? — CoffeeScript

javascript - HTML 标签在 CanJS 中使用 Mustache 模板进行转义

javascript - Google Timeline - 根据名称更改数据颜色

javascript - D3 散点与 x 轴不对齐

reactjs - 如何延迟加载 "import { SelectedComponent } from {Library}"?

c++ - 全局范围内的 typedef 模板