【发布时间】:2017-02-04 14:20:27
【问题描述】:
我完全按照这篇帖子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>
);
}
});
【问题讨论】:
-
你能澄清一下
If I input another value in my form and resubmit it then the data remains the same as before.吗? -
所以我在我的 html 中有一个表单,它接受用户输入,并基于此我进行 ajax 调用以将数据获取到我的结果中。但是发生的情况是,当用户第一次输入一个值时,一切正常。但是当用户在搜索框中输入另一个值时,结果不会被刷新,而是保持不变。
-
@90abyss
是一个带有静态文本的组件吧?您希望在第二个输入上看到什么? -
不,上面只是链接帖子中的代码 sn-p。我代码中的
组件基本上是根据用户输入进行 ajax 调用。
标签: javascript reactjs