ReaJS konusunda oldukça yeniyim ve tek bir sayfada aynı form bileşenine sahip olmanın en iyi yolunun ne olduğunu merak ediyorum. Lütfen akı kullandığımı ve bileşenlerin bir mağaza ile konuştuğunu unutmayın. ÖrneğinAynı sayfada aynı ReactJS form bileşeni ile çalışma
: < SearchForm /> < SearchForm />
Ben formu 1. giriş alanını kullanmaya çalıştığınızda, Form 2. Aynı anda formu 1. değeri alır. Sorunun mağazadan geldiğini düşünüyorum. bileşenler aynı mağazaya konuşuyor ve mağaza tüm bileşenleri bir kerede güncelliyor.
Bu sorunu nasıl çözebilirim?
, şu ana kadar kullandığım kod.
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;
Yardımlarınız için şimdiden teşekkür ederiz.
Eğerbileşen saklanan
value2
ile
value1
ile
<SearchForm />#1
sahip olmasını sağlar
ve <SearchForm />#2
(this.state üzerinden erişilen) iç durumu verilerini korumak:
Kodunuzu ekleyebilir misiniz? Her iki form da aynı durumu paylaşır. – tvdpol
Gerçekten 'ifadesine sahipseniz, # 1 formunda bir şey girdiğinizde, # 2 formunun güncellenmesine neden olamaz. Etiketleriniz de jQuery'den bahseder. Formu güncellemek için jQuery'yi kullanarak herhangi bir şansın var mı? O zaman bu, sorununun kaynağıdır. (Ve gerçekten jQuery'yi karıştırmamalısınız ve bu şekilde tepki vermelisiniz). Sorunuza daha fazla kod ekleyebilir misiniz? –
wintvelt
Soruyu güncelledim. – Hector