Ich bin ziemlich neu zu reagierenJS und ich frage mich, was ist der beste Weg, mit der gleichen Formularkomponente auf einer einzigen Seite zu behandeln. Bitte beachten Sie, dass ich Flussmittel verwende und die Komponente mit einem Geschäft spricht.Arbeiten mit der gleichen ReactJS Formularkomponente auf der gleichen Seite
Zum Beispiel: < Search /> < Search />
Wenn ich versuche, Form # 1 Eingabefeld zu verwenden, Form # 2 wird den Wert von der Form # 1 zur gleichen Zeit. Ich denke, das Problem kommt aus dem Laden. Die Komponenten sprechen mit demselben Geschäft, und das Geschäft aktualisiert alle Komponenten gleichzeitig.
Wie kann ich mit diesem Problem umgehen?
hier ist der Code, den ich bisher habe.
const SearchField = React.createClass({
propTypes: {
isSearchActivated: React.PropTypes.bool.isRequired,
},
_onChange() {
var previousHighlightedIndex = this.state.highlightedIndex;
this.setState(getStateFromStores(), function() {
if (previousHighlightedIndex == 0 &&
this.state.highlightedIndex == -1) {
this.refs.SearchBar.selectAll();
}
});
},
componentDidMount() {
if (window.location.pathname == "/" && !Modernizr.mq("screen only and (max-width: 768px)")) {
$(ReactDOM.findDOMNode(this.refs.SearchBar)).find("input").focus();
}
},
componentWillUnmount() {
SearchResultStore.removeChangeListener(this._onChange);
},
onChangeSearchString(e) {
SearchResultsUtils.search(e.target.value);
},
onBlur(e) {
var self = this;
var cb = function() {
if (!self.state.selectedResult && self.state.results.length) {
self.handleSelectedResult(0);
}
SearchResultsActions.disallowResultsDisplay();
};
if($(".search-bar").hasClass("active")) {
$(".search-bar.active").removeClass("active");
}
},
onFocus(e) {
$(ReactDOM.findDOMNode(this.refs.SearchBar)).closest(".search-bar").addClass("active");
},
handleSubmit() {
var self = this;
},
render() {
var className = "search-bar clearfix";
return (
<div className={className}>
<div className="search-bar-search">
<SearchBar
searchString={this.state.searchString}
onChange={this.onChangeSearchString}
onKeyDown={this.onKeyDownSearchString}
onFocus={this.onFocus}
onBlur={this.onBlur}
placeholder="Search Meds or Conditions"
ref="SearchBar" />
</div>
<SearchButton
handleSubmit={this.handleSubmit} />
</div>
);
},
});
module.exports = SearchField;
Danke für die Hilfe im Voraus.
Können Sie Ihren Code hinzufügen? Klingt wie beide Formen den gleichen Zustand teilen. – tvdpol
Wenn Sie wirklich ' '' haben, kann reaced nicht dazu führen, dass Formular # 2 aktualisiert wird, wenn Sie etwas in Formular # 1 eingeben. Ihre Tags erwähnen auch jQuery. Benutzen Sie jQuery, um das Formular zu aktualisieren? Dann ist dies wahrscheinlich die Quelle Ihres Problems. (Und du solltest jQuery wirklich nicht mischen und auf diese Weise reagieren). Könnten Sie Ihrer Frage mehr Code hinzufügen? –
wintvelt
Ich habe die Frage aktualisiert. – Hector