javascript - 清除输入框在某些条件下的 react

标签 javascript reactjs

我正在向测验 API 发出 get 请求。当用户得到正确的答案时,将显示下一个答案。

这一切都运行良好,但是当用户得到正确答案时尝试清除输入框时,我遇到了一些麻烦。 I read this earlier据我所知,它应该遵循相同的逻辑。

谁能发现这里出了什么问题吗?

var Quiz = React.createClass({

    getInitialState: function() {
        return {
                question: '',
                answer: '',
                value: '',
                score: 0
            }
    },

    getData: function() { 
        $.get('http://jservice.io/api/random', function(data){
            var response = data[0];
            console.log(response)

            this.setState({
                question: response.question,
                answer: response.answer
            })
        }.bind(this));
    },

    componentDidMount: function() {
        this.serverRequest = this.getData()
    },

    checkAnswer: function(event) {
        if(event.target.value.toLowerCase() === this.state.answer.toLowerCase()) {
            this.setState({
                score: this.state.score + 1,
                value: ''
            })
            this.getData();
        }
    },

    skipQuestion: function() {
        this.getData();
    },

    render: function() {
        var value = this.state.value
        return (
            <div>
                <p>{this.state.question}</p>
                <input type='text' value={value}  onChange={this.checkAnswer}/>
                <p onClick={this.skipQuestion}>New question</p>
                <p>{this.state.score}</p>
            </div>
        )
    }

});

最佳答案

我将此代码移至 jsbin并且您的输入清除逻辑工作正常。但是,正如 @finalfreq 在您的实现中提到的那样,不可能在输入框中输入完整的答案,每个输入都会被识别但永远不会显示。解决方法如下所示。唯一的变化是在 checkAnswer 中添加 else 情况:

var Quiz = React.createClass({

getInitialState: function() {
    return {
            question: '',
            answer: '',
            value: '',
            score: 0
        }
},

getData: function() { 
    $.get('http://jservice.io/api/random', function(data){
        var response = data[0];
        console.log(response)

        this.setState({
            question: response.question,
            answer: response.answer
        })
    }.bind(this));
},

componentDidMount: function() {
    this.serverRequest = this.getData()
},

checkAnswer: function(event) {
    if(event.target.value.toLowerCase() === this.state.answer.toLowerCase()) {
        this.setState({
            score: this.state.score + 1,
            value: ''
        })
        this.getData();
    } else {
        this.setState({
            value: event.target.value.toLowerCase()
        })
    }
},

skipQuestion: function() {
    this.getData();
},

render: function() {
    var value = this.state.value
    return (
        <div>
            <p>{this.state.question}</p>
            <input type='text' value={value}  onChange={this.checkAnswer}/>
            <p onClick={this.skipQuestion}>New question</p>
            <p>{this.state.score}</p>
        </div>
    )
}

});

关于javascript - 清除输入框在某些条件下的 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453776/

相关文章:

javascript - 正则表达式匹配字符串中的开始([)和结束(,)(仅)

javascript - JS 滚动事件未启动

javascript - 是否可以使用 Microsoft 身份验证库但不使用重定向 Uri 从 SPA 进行身份验证?

javascript - ReactJS:导入headroom后出现错误

ASP.NET Core 2.0 Razor 与 Angular/React/等

reactjs - 一起使用 react.useEffect 和 mobx.autorun

javascript - 根据下拉列表中的值更改文本框背景颜色

javascript - 如何使用 javascript 更改文本选择样式

javascript - 嵌套路由 ReactJS 的渲染组件

javascript - react 按钮 onClick 传递参数