异步状态与输入反应

机警的

我的状态有问题,每次都迟到。该应用程序包括用英语或法语检查您的词汇表,但我遇到了一个问题,即状态currentAnswer总是迟到一个字符且句子“正确!”。仅在我再写一个字符时显示。我无法解决问题。我只能猜测状态不是异步的,但我不能使其异步。任何想法 ?

import React from 'react';
import './App.css';

class App extends React.Component {

  constructor() {
    super();

    this.state = {
      words: [
        {
          francais: 'bonjour',
          anglais: 'hello',
        },
        {
          francais: 'manger',
          anglais: 'eat',
        },
        {
          francais: 'avoir',
          anglais: 'have',
        },
        {
          francais: 'faire',
          anglais: 'do',
        },
        {
          francais: 'jouer',
          anglais: 'play',
        }
    ],
    key: -1.4,
    currentWord: '',
    currentAnswer: '',
    correctAnswer: false,
    giveUp: false,
    currentScore: 0,
    scoreTotal: 0
    }
  }

  generateWord = () => {
    let index = Math.floor(Math.random() * (this.state.words.length + 1))
    if(index === this.state.key) {
      this.generateWord()
    }
    this.setState({currentWord: this.state.words[index]})
    this.setState({key: index})
  }

  validate = (e) => {
    e.preventDefault()
    const answer = e.target.value
    this.setState({ currentAnswer: answer})
    if (this.state.currentAnswer === this.state.currentWord.anglais) {
      this.setState({correctAnswer : true})
    }
  }

  showCorrection = (e) => {
    e.preventDefault()
    this.setState({giveUp: true})
    this.setState({scoreTotal: this.state.scoreTotal + 1})
  }

  nextWord = (e) => {
    e.preventDefault()
    this.setState({currentAnswer: ''})
    this.setState({ giveUp: false })
    this.setState({ correctAnswer: false })
    this.generateWord()
    if(this.state.correctAnswer) {
      this.setState({currentScore: this.state.currentScore + 1})
      this.setState({scoreTotal: this.state.scoreTotal + 1})
    }
  }

  componentDidMount() {
    this.generateWord()
  }

  render() {
    return (
      <div className="App">
        <p>Score: {this.state.currentScore}/{this.state.scoreTotal}</p>
        <h2 style={{
          color: "midnightblue",
          fontSize: "50px"
        }}>{this.state.currentWord?.francais}</h2> 
        <form action="">
          <input onChange={this.validate} value={this.state.currentAnswer} type="text" placeholder="Entrez la traduction anglaise"/>
          <button className="validation" onClick={this.showCorrection}>Give up</button>
          <button className="validation" onClick={this.nextWord}>Next</button>
        </form>      
        {this.state.correctAnswer ? <p>Correct !</p> : this.state.giveUp ? <p>La bonne réponse était: {this.state.currentWord?.anglais}</p>: ''}
      </div>
    )
  }
}

export default App;
adxl

实际上,setState()方法是异步的,不会总是立即更新。
但是要修正您的验证,只需将单词与当前输入而不是state中的当前答案进行比较:

validate = (e) => {
    e.preventDefault()
    const answer = e.target.value
    this.setState({ currentAnswer: answer})
    if (answer === this.state.currentWord.anglais) {
      this.setState({correctAnswer : true})
    }
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

验证状态和输入反应问题

来自分类Dev

反应-状态未更新

来自分类Dev

反应本地全局状态

来自分类Dev

反应:让子类分配状态?

来自分类Dev

使用无状态反应

来自分类Dev

反应状态验证

来自分类Dev

反应:延迟更新状态

来自分类Dev

我应如何将“ redux-thunk”用于异步初始状态?(反应/还原)

来自分类Dev

MobX异步反应

来自分类Dev

反应显示以前的状态

来自分类Dev

在使用反应形式取消Angular中的输入字段后如何触发异步验证器?

来自分类Dev

反应状态缺失

来自分类Dev

启动时从异步存储反应本地负载状态

来自分类Dev

反应状态更新

来自分类Dev

如何更新反应状态

来自分类Dev

排序反应状态数组

来自分类Dev

反应状态改变时输入不改变

来自分类Dev

反应setState不设置输入字段的状态

来自分类Dev

验证状态和输入反应问题

来自分类Dev

如何使反应输入显示状态值?

来自分类Dev

反应:以编程方式更改检查状态时触发复选框输入的onChange吗?

来自分类Dev

仅在单击按钮时反应更新状态,而不是在输入中写入内容时更新

来自分类Dev

处理多个反应形式输入并更新组件状态

来自分类Dev

反应异步数据(对象)分配给状态时被破坏

来自分类Dev

反应+流星。生成异步状态取决于集合

来自分类Dev

在Reducer中反应本机获取异步初始状态

来自分类Dev

Redux - 异步 - 输入字段更改的 POST 状态

来自分类Dev

反应 redux 异步操作

来自分类Dev

反应:在 useEffect 内设置输入状态不起作用