首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Fizz-Buzz

React Fizz-Buzz
EN

Stack Overflow用户
提问于 2020-08-25 17:17:31
回答 2查看 261关注 0票数 0

我是个新手,我的Fizz-Buzz应用程序一直有问题。控制台输出似乎没问题,但显示总是递增控制台编号。输出结果如下:

Console: 1/ Display: 2/ Text: / Display Text:

Console: 2/ Display: 3/ Text: / Display Text:

Console: 3/ Display: 4/ Text: Fizz / Display Text: Fizz

代码:

代码语言:javascript
复制
class FizzBuzz extends Component {
  constructor() {
    super()
    this.state = {
      number: 1,
      fizzbuzz: ""
    }
    this.onClick = this.onClick.bind(this)
    this.fizzOrBuzz = this.fizzOrBuzz.bind(this)
  }

  onClick() {
    let tempNo = this.state.number + 1
    this.setState({ number: tempNo })
    console.log(this.state.number)
    this.fizzOrBuzz()
  }

  fizzOrBuzz() {
    if ((this.state.number % 3 === 0) && (this.state.number % 5 === 0)) {
      console.log("fizz buzz")
      this.setState({ fizzbuzz: "Fizz-Buzz" })
    } else if (this.state.number % 3 === 0) {
      console.log("fizz")
      this.setState({ fizzbuzz: "Fizz" })
    } else if (this.state.number % 5 === 0) {
      console.log("buzz")
      this.setState({ fizzbuzz: "Buzz" })
    } else {
      this.setState({ fizzbuzz: "" })
    }
    console.log(this.state.number)
  }

  render() {
    return (
      <div className="App">
        <p>Number: {this.state.number}</p>
        <h2>{this.state.fizzbuzz}</h2>
        <button onClick={this.onClick}>Next</button>
      </div>
    )
  }
}

export default FizzBuzz

如何让页面呈现与控制台相同的数字?

EN

回答 2

Stack Overflow用户

发布于 2020-08-25 17:22:06

正如我在注释中提到的,this.setState()是异步的,您必须调用this.fizzOrBuzz()作为其回调。

然而,由于数字的冒泡或忙碌总是可以从数字本身派生出来的,所以它根本不应该处于状态。

代码语言:javascript
复制
function fizzOrBuzz(number) {
  if (number % 3 === 0 && number % 5 === 0) {
    return "Fizz-Buzz";
  } else if (number % 3 === 0) {
    return "Fizz";
  } else if (number % 5 === 0) {
    return "Buzz";
  }
  return "";
}

class FizzBuzz extends Component {
  constructor() {
    super();
    this.state = {
      number: 1,
    };
    this.onClick = this.onClick.bind(this);
  }

  onClick() {
    this.setState({ number: this.state.number + 1 });
  }

  render() {
    return (
      <div className="App">
        <p>Number: {this.state.number}</p>
        <h2>{fizzOrBuzz(this.state.number)}</h2>
        <button onClick={this.onClick}>Next</button>
      </div>
    );
  }
}
票数 2
EN

Stack Overflow用户

发布于 2020-08-25 17:21:50

设置状态并调用使用该状态的fizzbuzz将不起作用,因为该状态可能已更新,也可能未更新。您应该将fizzbuzz作为回调,以确保在使用它之前已经更新了状态。

https://reactjs.org/docs/react-component.html#setstate

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63575717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档