Ich habe genau das gemacht, was von der am meisten angenommenen Antwort auf diesen Beitrag show or hide element in react.js gezeigt wurde, um meine Elemente anzuzeigen und zu verbergen.ReactJS: Element anzeigen oder ausblenden funktioniert nur beim ersten Klick auf die Schaltfläche
Aber es funktioniert nur auf den ersten Knopf klicken. Wenn ich einen anderen Wert in mein Formular einfüge und ihn erneut übergebe, bleiben die Daten unverändert. Es geht nie wieder in "Ergebnisse". Was mache ich falsch?
Dies ist der Code aus diesem Link oben:
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 neuen 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>
);
}
});
Können Sie klären diese 'Wenn ich Eingabe eines anderen Wertes in meiner Form und schicken Sie dann die Daten die gleichen wie before.' bleiben? –
Also habe ich ein Formular in meinem HTML, das Benutzereingaben nimmt und basierend darauf mache ich einen Ajax-Aufruf, um Daten in meine Ergebnisse zu bekommen. Aber was passiert, wenn der Benutzer zum ersten Mal einen Wert eingibt, alles funktioniert gut. Wenn der Benutzer jedoch einen anderen Wert in die Suchbox eingibt, wird das Ergebnis nicht aktualisiert, sondern bleibt unverändert. – 90abyss
@ 90abyss ist eine Komponente mit statischem Text richtig? Was erwarten Sie von der zweiten Eingabe? –