javascript - ReactJS:显示或隐藏元素仅在第一次单击按钮时有效

标签 javascript reactjs

我完全按照这篇文章中投票最多的答案指出的那样做了 show or hide element in react.js显示和隐藏我的元素。

但它仅适用于首次单击按钮。如果我在我的表单中输入另一个值并重新提交,那么数据将与以前相同。它永远不会第二次进入“结果”。我做错了什么?

这是来自上面那个链接的代码:

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'));

编辑新代码:

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>
        );
    }
});

最佳答案

你需要切换为

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

关于javascript - ReactJS:显示或隐藏元素仅在第一次单击按钮时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39716396/

相关文章:

javascript - 将 ES 模块与 babel-standalone 一起使用

javascript - 如何使数组在Javascript中的不同函数下可访问?

javascript - 防止覆盖运行函数

javascript - 多个同时发生的事件javascript

javascript - JQuery Datatables 将复选框设置为选中

javascript,按下按钮(多个按钮)时显示文本,但一次仅显示一个文本

javascript - 为什么 fetchDashboard 函数被多次调用

javascript - 循环计算可放置区域中的项目

reactjs - React - 在 map 功能中生成不同的图标

reactjs - 测试在 React 功能组件中使用 ref 添加的鼠标事件监听器