简体   繁体   English

ReactJS:显示或隐藏元素仅在第一次按钮单击时起作用

[英]ReactJS: Show or hide element works only on first button click

I've done exactly as pointed by the most upvoted answer on this post show or hide element in react.js to show and hide my elements. 我完全按照这个帖子中最受欢迎的答案指出, 或者在react.js中隐藏元素以显示和隐藏我的元素。

But it works only on first button click. 但它仅适用于第一次按键点击。 If I input another value in my form and resubmit it then the data remains the same as before. 如果我在表单中输入另一个值并重新提交,那么数据将保持不变。 It's never going into "Results" second time onwards. 从来没有进入“结果”第二次。 What am I doing wrong? 我究竟做错了什么?

This is the code from that link above: 这是上面链接的代码:

var Search = React.createClass({
    getInitialState: function() {
        return { showResults: false };
    },
    onClick: function() {
        this.setState({ showResults: true });
    },
    render: function() {
        return (
            <div>
                <input type="submit" value="Search" onClick={this.onClick} />
                { this.state.showResults ? <Results /> : null }
            </div>
        );
    }
});

var Results = React.createClass({
    render: function() {
        return (
            <div id="results" className="search-results">
                Some Results
            </div>
        );
    }
});

ReactDOM.render(<Search />, document.getElementById('container'));

EDIT new code: 编辑新代码:

module.exports = React.createClass({
    getInitialState: function() {
        console.log("in getInitialState");
        return { showResults: false };
    },
    onClick: function(e) {
        e.preventDefault();
        data = null;
        console.log("in onClick");
        ticId = ReactDOM.findDOMNode(this.refs.ticketid).value;
        if (this.state.showResults == true) // second button click (update data)
        {
            var newdata = "";
            $.ajax({
            url: 'http://localhost:x/' + 'tickets',
            type: 'GET',
            dataType: 'json',
            async: false,
            headers: {
                "Authorization": "Basic " + btoa(u + ":" + p)
            },    
            data: {ticketid: ticId},
            success: function(result) {
                newdata = result.results;
                }
            });

            if(newdata)
            {
                console.log(newdata); //SUCCESS: getting new data here
            }

            this.state.data = newdata; //FAIL: state not getting refreshed
        }

        else
        {
            this.setState({ showResults: true });
        }
    },
    render: function() {
        return (
            <div className='someclass'>
                <form className="someForm" onSubmit={this.onClick}>
                    <input type="text" placeholder = "Enter ticket Id" ref="ticketid" />
                    <input type="submit" value="Find!!" />
                    { this.state.showResults ? <Results /> : null }
                </form>

            </div>
        );
    }
});

you need to toggle as 你需要切换为

    onClick: function() {
        this.setState({ showResults: !this.state.showResults });
    },

Better to use this: 最好用这个:

onClick: function() {
  this.setState(function (prevState) {
    return {
      showResults: !prevState.showResults
    };
  });
}

Source 资源

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM